PHP Dosya Yükleme
- Önceki Sayfa PHP Dosya Oluşturma/ Yazma
- Sonraki Sayfa PHP Çerezler
PHP ile dosyaları sunucuya yükleyebilirsiniz。
Bir dosya yükleme formu oluşturun
Kullanıcıların formdan dosya yüklemesine izin vermek çok kullanışlıdır。
Aşağıda, dosya yüklemek için HTML formunu görmektesiniz:
<html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Dosya Adı:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Gönder" /> </form> </body> </html>
Aşağıdaki bu form hakkında dikkat edin:
<form> etiketinin enctype özelliği, formun gönderilirken hangi içerik türünün kullanılacağını belirler. Formda ikili veri gerektiğinde, örneğin dosya içeriği için, "multipart/form-data" kullanın。
<input> etiketinin type="file" özelliği, girdinin dosya olarak işlenmesini gerektirir. Örneğin, tarayıcıda önizleme yaparken, girdi kutusunun yanında bir tarayıcı düğmesi göreceksiniz。
Açıklama:Kullanıcıların dosya yüklemesi yapmasına izin vermek büyük bir güvenlik riskidir. Lütfen yalnızca güvenilir kullanıcıların dosya yükleme işlemi gerçekleştirmesine izin verin。
Yükleme betiğini oluşturun
"upload_file.php" dosyası, dosya yüklemek için kod içermektedir:
<?php if ($_FILES["file"]["error"] > 0) { echo "Hata: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Kaydedildi: " . $_FILES["file"]["tmp_name"]; } ?>
PHP'nin global dizi $_FILES kullanılarak, müşteri bilgisayarından uzak sunucuya dosya yüklenmesi sağlanabilir.
İlk parametre formun input name'idir, ikinci alt indeks "name", "type", "size", "tmp_name" veya "error" olabilir. Böylece:
- $_FILES["file"]["name"] - Yüklenen dosyanın adı
- $_FILES["file"]["type"] - Yüklenen dosyanın türü
- $_FILES["file"]["size"] - Yüklenen dosyanın boyutu, bayt cinsinden
- $_FILES["file"]["tmp_name"] - Sunucudaki dosyanın geçici kopyasının adı
- $_FILES["file"]["error"] - Dosya yüklemesi nedeniyle kaynaklanan hata kodu
Bu, oldukça basit bir dosya yükleme yöntemidir. Güvenlik açısından dikkate alınacak olan, kimin dosya yüklemesine yetkili olacağına dair sınırlamalar eklemelisiniz.
Yükleme sınırlamaları
Bu betikte, dosya yüklemesine yönelik sınırlamaları artırdık. Kullanıcılar sadece .gif veya .jpeg dosyalarını yükleyebilir, dosya boyutu 20 kb'den küçük olmalıdır:
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Hata: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Kaydedildi: " . $_FILES["file"]["tmp_name"]; } } else { echo "Geçersiz dosya"; } ?>
Açıklama:IE için jpg dosya türünün tanınması pjpeg olmalı, FireFox için jpeg olmalıdır.
Yüklenen dosyayı kaydetme
Yukarıdaki örnek, sunucunun PHP geçici klasöründe yüklenen dosyanın geçici kopyasını oluşturur.
Bu geçici kopyalama dosyası betiğin sonunda ortadan kalkar. Yüklenen dosyayı kaydetmek için onu başka bir konuma kopyalamamız gerekecek:
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Dönüş Kodu: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Depolanan: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Geçersiz dosya"; } ?>
Yukarıdaki betik, bu dosyanın var olup olmadığını kontrol eder, yoksa dosyayı belirtilen klasöre kopyalar.
Açıklama:Bu örnek, adı "upload" olan yeni klasörde dosyayı kaydetti.
- Önceki Sayfa PHP Dosya Oluşturma/ Yazma
- Sonraki Sayfa PHP Çerezler