PHP ile dosya yüklemek oldukça kolaydır. Dosya yükleme formunda metot olarak POST metodu kullanılır ve <form>...</form> etiketlerine enctype="multipart/form-data" özelliği eklenir.
Yüklenecek dosyayı seçmek için <input type="file" name="form_adi"> formu kullanılır.
Aşağıda örnek bir dosya yükleme formu vardır. İnceleyiniz.
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="yukle.php" enctype="multipart/form-data"> Yüklenecek Dosyayı seçiniz: <input type="file" name="dosya"><br> <input type="submit" name="yukle" value="Yükle"> </form> </body> </html>
Dosya seçildikten sonra yüklemenin yukle.php sayfasında yapılacağı action özelliğinde görülmektedir.
Sunucuya yüklenen bütün dosyalar geçici olarak yüklenmektedir. Bunun sebebi dosyayı kalıcı olarak yüklemeden önce özelliklerine bakmaktır. Geçici olarak yüklenen dosyanın türüne, boyutuna, adına ve daha önce yüklenip yüklenmediğine bakarsınız, eğer tüm bunlar sizin istediğiniz gibiyse bu dosyayı kalıcı olarak sunucuda istediğiniz dizine kaydedersiniz. Kalıcı olarak kaydedilmeyen dosyalar ise zaman içinde sunucudan kendiliğinden silinecektir.
Şimdi geçici olarak yüklenen dosyanın yukle.php sayfasında ne gibi özelliklerine bakacağımıza ve bunu kalıcı olarak nasıl kaydedeceğimize bakalım.
Yüklenen dosyayla ilgili özelliklere ulaşmak için iki boyutlu $_FILES dizisi kullanılır. Bu dizinin birinci boyutunun indisi dosyanın seçildiği formun adı yani name değeridir (name="dosya"). İkinci boyutunun indisleri ise sabittir ve aşağıda verilmiştir.
$_FILES["dosya"]["name"] > "dosya" isimli form elemanından yüklenen dosyanın gerçek adıdır.
$_FILES["dosya"]["tmp_name"] > "dosya" isimli form elemanından yüklenen dosyanın geçici adıdır.
$_FILES["dosya"]["type"] > "dosya" isimli form elemanından yüklenen dosyanın türüdür.
$_FILES["dosya"]["size"] > "dosya" isimli form elemanından yüklenen dosyanın byte olarak boyutudur.
$_FILES["dosya"]["error"] > "dosya" isimli form elemanından yükleme yaparken oluşan hatadır.
Unutmayınız aynı anda birden fazla dosyayı upload edebilirsiniz. Şimdi yukle.php sayfasında yüklenen dosyanın özelliklerini ekrana yazdıralım.
<!--yukle.php--> <html> <body> <?php echo "<b>Yüklenen dosyanın adı:</b> ",$_FILES["dosya"]["name"],"<br>"; echo "<b>Yüklenen dosyanın geçici adı:</b> ",$_FILES["dosya"]["tmp_name"],"<br>"; echo "<b>Yüklenen dosyanın türü:</b> ",$_FILES["dosya"]["type"],"<br>"; echo "<b>Yüklenen dosyanın boyutu:</b> ",$_FILES["dosya"]["size"],"<br>"; echo "<b>Varsa yüklerken oluşan hata:</b> ",$_FILES["dosya"]["error"],"<br>"; ?> </body> </html>
Yukarıdaki yukle.php sayfasında sadece, geçici olarak yüklenen dosyanın özellikleri ekrana yazdırılmıştır. Bu özellikleri kontrol ederek istenirse dosyayı kalıcı olarak kaydedebilirsiniz.
Bir dosyayı kalıcı olarak kaydetmek için move_uploaded_file($p1, $p2); fonksiyonu kullanılır. Bu fonksiyon iki parametre alır.
$p1 > Dosyanın geçici adıdır. Buraya $_FILES["dosya"]["tmp_name"] ifadesi yazılır.
$p2 > Dosyanın kalıcı yolu ve adıdır. Buraya ise istediğiniz bir yolu ve adı yazabilirsiniz.
Dosyaları kalıcı olarak kaydederken aşağıdaki sorunlardan birini yaşayabilirsiniz. Bunlara dikkat ediniz.
Örnek: Seçilen dosyayı kendi adıyla upload isimli dizine yükleyen php sayfalarını hazırlayalım. Web dizininda upload isimli bir dizin yoksa oluşturunuz ve yazma izni veriniz.
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="yukle.php" enctype="multipart/form-data"> Yüklenecek Dosyayı seçiniz: <input type="file" name="dosya"><br> <input type="submit" name="yukle" value="Yükle"> </form> </body> </html>
<!--yukle.php--> <html> <body> <?php $gecici_ad=$_FILES["dosya"]["tmp_name"]; $kalici_yol_ad="upload/".$_FILES["dosya"]["name"]; // dosya kendi adıyla upload dizinine kaydedilecek if (move_uploaded_file($gecici_ad,$kalici_yol_ad)) // eğer dosya kaydedilirse echo "Dosya başarı ile yüklendi."; else echo "Yükleme başarısız!"; ?> </body> </html>
Bu örnekte dosya, hiçbir özelliğine bakmaksızın upload dizinine kaydediliyor.
Örnek: Daha önce yüklenmemiş olan jpg resimlerini kendi adlarıyla upload dizinine yükleyelim.
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="yukle.php" enctype="multipart/form-data"> Jpg resmi seçiniz: <input type="file" name="dosya"><br> <input type="submit" name="yukle" value="Yükle"> </form> </body> </html>
<!--yukle.php--> <html> <body> <?php $gecici_ad=$_FILES["dosya"]["tmp_name"]; // dosya kendi adıyla upload dizinine kaydedilecek $kalici_yol_ad="upload/".$_FILES["dosya"]["name"]; if (file_exists("upload/".$_FILES["dosya"]["name"])) // yüklenen dosya upload dizininde varsa echo "Seçtiğiniz dosya daha önce yüklenmiştir."; else{ if ($_FILES["dosya"]["type"]=="image/jpeg"){ if (move_uploaded_file($gecici_ad,$kalici_yol_ad)) // eğer dosya kaydedilirse echo "Dosya başarı ile yüklendi."; else echo "Yükleme başarısız!"; } else echo "Lütfen jpg resmi seçiniz."; } ?> </body> </html>
Örnek: Aşağıdaki şartlar sağlanırsa dosyayı kendi adıyla upload dizinine yükleyelim.
-Hata oluşmazsa
-Dosya daha önce yüklenmemişse
-Dosya gif dosyası ise
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="yukle.php" enctype="multipart/form-data"> Gif resmi seçiniz: <input type="file" name="dosya"><br> <input type="submit" name="yukle" value="Yükle"> </form> </body> </html>
<!--yukle.php--> <html> <body> <?php $gecici_ad=$_FILES["dosya"]["tmp_name"]; $kalici_yol_ad="upload/".$_FILES["dosya"]["name"]; // dosya kendi adıyla kaydedilecek if ($_FILES["dosya"]["error"]) // hata oluştu ise echo "Hata : ",$_FILES["dosya"]["error"]; else{ if (file_exists("upload/".$_FILES["dosya"]["name"])) // yüklenen dosya upload dizininde varsa echo "Seçtiğiniz dosya daha önce yüklenmiştir."; else{ if ($_FILES["dosya"]["type"]=="image/gif"){ if (move_uploaded_file($gecici_ad,$kalici_yol_ad)) // eğer dosya kaydedilirse echo "Dosya başarı ile yüklendi."; else echo "Dosya yükleme başarısız!"; } else echo "Lütfen gif resmi seçiniz."; } } ?> </body> </html>
Örnek: Aşağıdaki şartlara göre kullanıcının seçtiği dosyayı kullanıcının yazdığı ad ile upload dizinine kaydeden php sayfalarını hazırlayalım.
-Hata oluşmazsa
-Dosya daha önce yüklenmemiş ise
-Dosya pdf dosyası ise
-Dosya boyutu 500 KB'dan küçük ise
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="yukle.php" enctype="multipart/form-data"> <table border="0"> <tr> <td>Dosyanın Kalıcı Adı:</td> <td><input type="text" name="kalici_ad"></td> </tr> <tr> <td>PDF Dosyası Seçiniz:</td> <td><input type="file" name="dosya"></td> </tr> <tr> <td> </td> <td><input type="submit" name="yukle" value="Yükle"></td> </tr> </table> </form> </body> </html>
<!--yukle.php--> <html> <body> <?php $gecici_ad=$_FILES["dosya"]["tmp_name"]; $kalici_yol_ad="upload/".$_POST["kalici_ad"].".pdf"; if ($_FILES["dosya"]["error"]) // hata oluştu ise echo "Hata : ",$_FILES["dosya"]["error"]; else{ if (file_exists($kalici_yol_ad)) // yüklenen dosya upload dizininde varsa echo "Yazdığınız ad ile bir dosya zaten kayıtlıdır."; else{ if ($_FILES["dosya"]["size"]>500*1024) echo "500KB'dan küçük bir dosya seçiniz."; else{ if ($_FILES["dosya"]["type"]=="application/pdf"){ if (move_uploaded_file($gecici_ad,$kalici_yol_ad)) // eğer dosya kaydedilirse echo "Dosya başarı ile yüklendi."; else echo "Dosya yükleme başarısız."; } else echo "Lütfen PDF dosyası seçiniz."; } } } ?> </body> </html>
Örnek: Şimdi tam bir dosya yükleme örneği verelim. Burada dosyalar kendi adlarıyla upload dizinine kaydedilecektir. Tabiki Türkçe'ye özgü karakterler temizlendikten sonra. Bunun için bir fonksiyon tanımlayıp kullacağız. Ayrıca yükleme aynı sayfada yapılacaktır.
<!--index.php--> <html> <body> <form name="yukleme" method="post" action="index.php" enctype="multipart/form-data"> <table border="0"> <tr> <td>Dosya Seçiniz:</td> <td><input type="file" name="dosya"></td> </tr> <tr> <td> </td> <td><input type="submit" name="yukle" value="Yükle"></td> </tr> </table> </form> <?php function turkce($metin){ $aranan=array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü"," "); $yerine=array("c","c","g","g","i","i","o","o","s","s","u","u","_"); return str_replace($aranan,$yerine,$metin); } if($_POST){ $gecici_ad=$_FILES["dosya"]["tmp_name"]; $kalici_yol_ad="upload/".turkce($_FILES["dosya"]["name"]); if ($_FILES["dosya"]["error"]) // hata oluştu ise echo "<font color='green'>Hata : ",$_FILES["dosya"]["error"],"</font>"; else{ if (file_exists($kalici_yol_ad)) // yüklenen dosya upload dizininde varsa echo "<font color='red'>Yazdığınız ad ile bir dosya zaten kayıtlıdır.</font>"; else{ if (move_uploaded_file($gecici_ad,$kalici_yol_ad)) // eğer dosya kaydedilirse echo "<font color='green'>Dosya başarı ile yüklendi.</font>"; else echo "<font color='red'>Dosya yükleme başarısız.</font>"; } } } ?> </body> </html>
PHP'de dosya türlerine karşılık gelen ifadelere buradan bakabilirsiniz.
Bu site meslek liselerinde bilişim bölümü web programcılığı dalında okutulan internet programcılığı dersine yardımcı olması için tasarlanmıştır. İletişim için iletisim@phpdefteri.com
Apache
PHP
MySQL
PhpMyAdmin
EasyPHP
Xampp
AppServ
Wamp
W3School
www.phpdefteri.com © 2010