Dosya Yüklemelerini İşleme
Yüklenen dosyaları _FILES süper küresini kullanarak güvenli biçimde işleyin.
Dosya Yüklemelerini İşleme, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.
PHP Dosya Yüklemelerine Genel Bakış
PHP, dosya yüklemelerini $_FILES süper küreseli aracılığıyla işler. Formda method="POST" ve enctype="multipart/form-data" kullanılmalıdır.
HTML Yükleme Formu
Tekli ve çoklu dosya yüklemeleri için HTML form kurulumu:
<!-- Single file -->
<form method="POST" action="upload.php"
enctype="multipart/form-data">
<input type="file" name="document">
<button>Upload</button>
</form>
<!-- Multiple files -->
<form method="POST" enctype="multipart/form-data">
<input type="file" name="photos[]" multiple>
<button>Upload All</button>
</form>$_FILES Yapısı
Her yüklenen dosyanın $_FILES içinde beş girdisi vardır:
<?php
$file = $_FILES['document'];
echo $file['name']; // original name: report.pdf
echo $file['type']; // browser-reported MIME: application/pdf
echo $file['tmp_name']; // server temp path: /tmp/phpXXXXXX
echo $file['error']; // error code: 0 = UPLOAD_ERR_OK
echo $file['size']; // file size in bytesYükleme Hata Kodları
İşlemeden önce her zaman $file['error'] değerini kontrol edin:
<?php
$errorMessages = [
UPLOAD_ERR_INI_SIZE => 'Exceeds upload_max_filesize in php.ini',
UPLOAD_ERR_FORM_SIZE => 'Exceeds MAX_FILE_SIZE in form',
UPLOAD_ERR_PARTIAL => 'Only partially uploaded',
UPLOAD_ERR_NO_FILE => 'No file uploaded',
UPLOAD_ERR_NO_TMP_DIR => 'Missing temp folder',
UPLOAD_ERR_CANT_WRITE => 'Failed to write to disk',
UPLOAD_ERR_EXTENSION => 'PHP extension stopped upload',
];
$err = $_FILES['doc']['error'];
if ($err !== UPLOAD_ERR_OK) {
die($errorMessages[$err] ?? 'Unknown error');
}Dosya Türünü Güvenli Şekilde Doğrulama
Tarayıcının sağladığı MIME türüne asla güvenmeyin — gerçek dosya içeriğiyle doğrulayın:
<?php
$tmp = $_FILES['image']['tmp_name'];
$allowed = ['image/jpeg', 'image/png', 'image/webp'];
// Check real MIME type from file content
$realMime = mime_content_type($tmp);
if (!in_array($realMime, $allowed)) {
die('Invalid file type: ' . $realMime);
}Dosya Boyutunu Doğrulama
HTML formunda MAX_FILE_SIZE gizli alanı olsa bile sunucu tarafında boyut sınırlarını zorunlu kılın:
<?php
$maxBytes = 5 * 1024 * 1024; // 5MB
$size = $_FILES['video']['size'];
if ($size > $maxBytes) {
$mb = round($size / 1024 / 1024, 2);
die("File too large: {$mb}MB (max 5MB)");
}is_uploaded_file ve move_uploaded_file
Dosyanın HTTP yüklemesiyle geldiğini doğrulamak ve dosyayı güvenle taşımak için her zaman bu iki işlevi kullanın:
<?php
$tmp = $_FILES['photo']['tmp_name'];
$dest = '/var/www/uploads/' . basename($_FILES['photo']['name']);
if (!is_uploaded_file($tmp)) {
die('Not an uploaded file — possible attack');
}
if (!move_uploaded_file($tmp, $dest)) {
die('Failed to move uploaded file');
}
echo 'Upload saved to: ' . $dest;Güvenli Dosya Adları Oluşturma
Dizin geçişi ve üzerine yazma saldırılarını önlemek için rastgele bir dosya adı oluşturun:
<?php
$originalName = $_FILES['doc']['name'];
$ext = strtolower(pathinfo($originalName, PATHINFO_EXTENSION));
$allowedExts = ['jpg', 'jpeg', 'png', 'pdf'];
if (!in_array($ext, $allowedExts)) {
die('File type not allowed');
}
$safeName = bin2hex(random_bytes(16)) . '.' . $ext;
$dest = '/var/www/uploads/' . $safeName;
move_uploaded_file($_FILES['doc']['tmp_name'], $dest);Birden Çok Dosya Yüklemesini İşleme
name="photos[]" kullanırken $_FILES diziler içerir — bunlar üzerinde yineleme yapın:
<?php
$files = $_FILES['photos'];
$count = count($files['name']);
for ($i = 0; $i < $count; $i++) {
if ($files['error'][$i] !== UPLOAD_ERR_OK) continue;
$tmp = $files['tmp_name'][$i];
$ext = pathinfo($files['name'][$i], PATHINFO_EXTENSION);
$dest = '/uploads/' . uniqid() . '.' . strtolower($ext);
move_uploaded_file($tmp, $dest);
echo "Saved: $dest" . PHP_EOL;
}php.ini Yükleme Ayarları
Dosya yüklemelerini etkileyen temel php.ini yönergeleri:
file_uploads = On— yüklemeleri etkinleştirirupload_max_filesize = 8M— tek dosya için maksimum boyutpost_max_size = 32M— maksimum POST gövdesi boyutu (upload_max_filesize değerinden büyük olmalıdır)max_file_uploads = 20— istek başına maksimum dosya sayısı
Yüklemeden Sonra Görselleri Yeniden Boyutlandırma
Yüklemeden sonra görselleri yeniden boyutlandırmak için GD kitaplığını kullanın:
<?php
function resizeImage(string $src, string $dst, int $maxW): void {
[$w, $h, $type] = getimagesize($src);
$ratio = $maxW / $w;
$newH = (int) ($h * $ratio);
$srcImg = imagecreatefromjpeg($src);
$dstImg = imagecreatetruecolor($maxW, $newH);
imagecopyresampled($dstImg, $srcImg, 0,0,0,0, $maxW, $newH, $w, $h);
imagejpeg($dstImg, $dst, 90);
imagedestroy($srcImg);
imagedestroy($dstImg);
}Hızlı Kontrol
Yüklenen bir dosyayı son hedefine güvenle taşımak için hangi PHP işlevi gereklidir?
Özet: Dosya Yüklemeleri
Yükleme işleme kontrol listesi:
- Formda
method=POST enctype=multipart/form-datakullanılmalıdır $_FILES['field']['error'] === UPLOAD_ERR_OKdeğerini kontrol edin- Gerçek MIME türünü
mime_content_type()ile doğrulayın - Dosya boyutunu sunucu tarafında doğrulayın
move_uploaded_file()kullanın — rename/copy kullanmayın- Çakışmaları önlemek için rastgele dosya adları oluşturun
Sıkça Sorulan Sorular
“Dosya Yüklemelerini İşleme” dersi ücretsiz mi?
Evet — “Dosya Yüklemelerini İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.
“Dosya Yüklemelerini İşleme” dersinde ne öğreneceğim?
Yüklenen dosyaları _FILES süper küresini kullanarak güvenli biçimde işleyin. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
PHP Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Dosya Yüklemelerini İşleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- PHP ile Dosya Okuma
- Dosyalara Yazma ve Ekleme
- Dizinlerle Çalışma
- Dosya Yüklemelerini İşleme