0Pricing
PHP Academy · Ders

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 bytes

Yü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ştirir
  • upload_max_filesize = 8M — tek dosya için maksimum boyut
  • post_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-data kullanılmalıdır
  • $_FILES['field']['error'] === UPLOAD_ERR_OK değ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

  1. PHP ile Dosya Okuma
  2. Dosyalara Yazma ve Ekleme
  3. Dizinlerle Çalışma
  4. Dosya Yüklemelerini İşleme
← PHP Academy Sayfasına Dön