PHP BİLEN

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    StyLe
    StyLe's avatar
    Kayıt Tarihi: 26/Ağustos/2005
    Erkek

    uzun zamandır flash oyun sitesi yapmak istiyorum ve güzel bir script bulamadım.


    oyunweb.com - oyyun.com daha birçok örnek verebiliriz. Oyunu  Admin Panelinden upload edebileceğimiz bir php script yazabilecek bi nevi bir yardım sever arıyorum ;)


    tabii ben bunun altında kalmayacağım. karşılığını alıcak ama şuan için değil..


    MSN: cuneytozavci@hotmail.com


    www.adarehberim.com // Sakarya Firma Rehberi
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PerVerT
    PerVerT's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek

    Biraz araştırırsan sanırım bi şeyler bulabilirsin yada bu metni okumalısın yok oda olmadı tekrar forumdan haberleşiriz bildiğimiz kadarıyla sana yardımcı olmaya çalışırım . kolay gelsin


    Alıntıdır!


    Dosya yükleme hakkında özet bir yazı.


    PHP İle Sunucuya Dosya Yükleme (File Upload)

    Web uygulamalrında bazen sunucuya istemci tarafından dosya (e-posta atarken ek dosya gönderme gibi) yüklenmesine ihtiyaç duyulur. Bu yazı istemciden sunucuya dosya yükleme uygulamarı için PHP 'nin sağladığı fonksiyonlar hakkındadır.


    PHP dosya yüklemeyi destekleyen bütün tarayıcılardan dosya yükleme isteklerini işleyebilir. İki farklı yöntemle bu yapılabilmektedir. POST ve PUT yöntemleri. Bu yazıda daha çok kullanılan POST yönteminden bahsedeceğiz.

    POST yöntemi HTML 'form' kullanılarak yüklenecek dosyanın belirtilmesi ve bu dosyanın POST yöntemiyle sunucudaki bir betiğe gönderilmesinden ibarettir. Yalnız dosya yüklerken kullanılan HTML 'form' un belli başlı farklılıkları vardır. Dosya yüklemek için kullanacağımız HTML 'form' aşağıdaki gibi olmalıdır.
    <form enctype='multipart/form-data' action='dosyayi_alip_islem_yapacak_php_betigi' method='POST'> Gönderilecek dosya: <input name='userfile' type='file'> <input type='submit' value='Gönder'></form>

    Bu formda dikkat edilmesi gereken ve diğer formlardan farklı olan iki nokta vardır. Birincisi dosya ismini verğimiz'type=file' olan form elemanıdır. İkincisi ise form özelliği olarak 'enctype='multipart/form-data'' kullanılmasıdır. Bu özellik kullanılmasza dosya sunucuya gönderilemez. Form doldurulup (dosya yolu belirtilip) gönderildiğinde formu işleyecek betikte $_FILES global değişkeni oluşur. Bu değişken kullanılarak yüklenmek istenen dosya hakkında gerekli bilgilere ulaşırız. Bu dizinin indeksleri ve değerleri şu şekildedir.

    $_FILES['userfile']['name'] : Dosyanın istemci bilgisayarındaki gerçek ismi.
    $_FILES['userfile']['type'] : Dosyanın türü. Örneğin image/gif, image/jpg gibi
    $_FILES['userfile']['size']: Dosyanın boyutunun byte cinsinden değeri.
    $_FILES['userfile']['tmp_name'] : Dosyanın sunucudaki geçici yeri. Form doldurulup gönderildiğinde dosya PHP tarafından php.ini 'de upload_tmp_dir belirteciyle (directive) belirtilen dizine bu isim ile alınır. Daha sonra PHP fonksiyonları kullanılarak başka biryere kayıt edildiğinde dosya buradan silinir.
    $_FILES['userfile']['error'] : Dosya yükleme ile ilgili oluşan hatanın kodu. Form doldurulup gönderildiğinde dosya geçici dizine geçici bir isimle yüklenir ve PHP $_FİLES dizisini kullanarak dosyayı istediğimiz dizine kopyalayabiliriz. Bu kopyalama işlemleri için PHP nini sağladığı öntanımlı fonksiyonları kullanırız. Basit bir örnek olarak :

    <?php $uploaddir= '/var/www/dosya/';
    $uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], uploadfile)) {
    echo 'Dosya yüklemesi sorunsuz bir şekilde yapıldı';
    }else {
    echo 'Dosya yüklemesinde bir hata var. Hata Kodu:'.$_FILES['userfile']['error'];
    }
    echo 'Dosya ile ilgili ayrıntılı bilgi :&lt;br&gt;';
    print_r($_FILES);
    ?>



    Yukarıdaki kod ile form tarafından gönderilen dosya $uploadfile değişkeninde belirtilen yere kaydedilir. Bunun için kullanılan move_uploaded_file()fonksiyonu iki parametre alır. Birincisi yüklenecek dosya ismidir ve geçici dizine kaydedilen dosya adı ile verilmelidir. (Örneğimizdeki $_FILES['userfile']['tmp_name'] ). İkinci parametre ise dosyanın kaydedileceği dizindir. move_uploaded_file() dosya yüklemede yada dizine kopyalamada problem olursa False döner. Kopyalama işlemi başarıyla yapıldığında ise True döner. move_uploaded_file() kopyalanmak istenen dosya klasörde var ise bir uyarı vermeden üzerine yazar. Bu fonksiyonu kullanarak sadece PHP aracılığıyla yüklenmiş dosyaları kopyalayabiliriz.
    Ek olarak is_uploaded_file() fonksiyonu kullanarak dosyanın POST yöntemiyle yüklenip yüklenmediğini kontrol edebiliriz. Fonksiyon dosya POST yöntemiyle yüklenmişse ve dosya ile ilgili bir güvenlik problemi yoksa True döner. Dosya yüklerken güvenlik kontrolu için bu dosya da kullanılmalıdır. Dosyanın sunucudaki geçici ismini $_FILES['userfile']['tmp_name'] arguman olarak alır.

    <?php
    $uploaddir= '/var/www/dosya/';
    $uploadfile = $uploaddir.basename($_FILES['userfile']['name']);
    if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo 'Dosya yüklemesi sorunsunz bir şekilde yapıldı';
    }
    else {

    echo 'Dosya yüklemesinde bir hata var. Hata Kodu :'.$_FILES['userfile']['error'];
    }/B>
    }
    else {

    echo 'Dosya yükleme de bir sorun var. Bir saldırı olabilir!';
    }
    echo 'Dosya ile ilgili ayrıntılı bilgi :&lt;br&gt;';
    print_r($_FILES);
    ?>


    Aynı Anda Birden Fazla Dosya Yükleme

    PHP ile aynı anda birden fazla dosya yüklenebilir. bunun için dosya yükleme formunun uygun şekilde yapılması gereklidir. Örneğin


    <form action='' method='enctype=multipart/form-data'>
    Resimler:
    <input type='file' name='pictures[]'>
    <input type='file' name='pictures[]'>
    <input type='file' name='pictures[]'>
    <form>

    Form doldurulup gönderildiğinde dosyalara $_FILES
    değişkeni kullanarak ulaşabiliriz. Tek dosya yüklemesinden farklı olarak $_FILES['pictures']['name'],
    $_FILES['pictures']['tmp_name'],
    $_FILES['pictures']['size']
    ve $_FILES['pictures']['type'] birer dizi (array) olarak oluşturulur.


    $_FILES['pictures']['name'][0] İlk dosyanın adı
    $_FILES['pictures']['name'][1] İkinci dosyanın adı
    $_FILES['pictures']['name'][2] Üçüncü dosyanın adı

    $_FILES['pictures']['size'][0] İlk dosyanın boyutu
    $_FILES['pictures']['size'][1] İkinci dosyanın boytu
    $_FILES['pictures']['size'][0] Üçüncü dosyanın boyutu


    Birden çok dosyayı aşağıdakine benzer bir kodla sunucuya yükleyebiliriz.


    <?php
    foreach($_FILES['pictures']['error'] as $key => $error) {
    if($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES['pictures']['tmp_name'][$key];
    $name = $_FILES['pictures']['name'][$key];
    move_uploaded_file($tmp_name,$name);
    }
    }
    ?>


    İpuçları Öneriler

    1) Php.ini deki upload_max_filesizebelirterciyle belirtilen boyuttan fazla boyuttaki dosyaları yüklenmeye çalışıldığında hata verir. Bu belirteci ihtiyaca göre ayarlanmalıdır.

    2) Php.ini deki post_max_sizebelirtecinin değeri de dosya yüklemeleri etkiler. upload_max_filesizedeğeri post_max_size değerinden büyükse boyutu post_max_size değerinden büyük dosyalar yüklenirken hata verir.

    3) Yüklenen dosya türlerini kontrol etmek güvenlik için önemlidir. Bu kontrolu $_FILES['userfile']['type'] değerini kullanarak yapabilirsiniz. Bu değer tarayıcı tarafından gönderildiği ve PHP bu değeri ayrıntılı kontrol etmediği için olması gereken değerinden farklı gönderilebilir. Kullanıcı çalıştırılabilir bir dosya (Örneğin php dosyası) image/gif gibi yükleyip daha sonra bu dosyayı çalıştırıp sunucunuzda işlem yapabilir. Daha güvenli kontrol için mime_content_type() ,getimagesize() gibi fonksiyonları kullanılarak dosya türü hakkında daha doğru bilgi alınabilir.

    4) Max_input_time belirteci bir betiğin girdi (input) alırken geçirebileceği azami süreyi belirtir. Bu süre yavaş bağlantılarda boyutu büyük dosyaları yükleme sırasında geçilebilir ve bu durum dosya yüklenmesine engel olur.

    5) Farklı dosya sistemleri ve listeleme türleri olduğu için dosya isimlerinde boşluk, Türkçe karakter kullanılan dosyaların işlemlerinde hata olabilir.



    www.php.net 'teki 'Chapter 38. Handling file uploads' konusunun sadeleştirilmiş ve Türkçe''ye çevirilmiş halidir.


    Yaşamak Hızlı Bir Ölme Biçimidir!
Toplam Hit: 1733 Toplam Mesaj: 2