Dosya yükleme formu bazı boyutlarda çalışıp daha büyük dosyalarda boş $_FILES ile dönüyorsa, PHP koduna geçmeden önce iki farklı sınırı ayırın. upload_max_filesize tek dosyanın boyutunu; post_max_size ise dosyalar ve form alanları dahil tüm POST gövdesini sınırlar. İkinci değer birinciden büyük olmalıdır.
Önce PHP'nin verdiği yükleme kodunu okuyun
İstek PHP'ye ulaştıysa $_FILES['belge']['error'] alanı yüklemenin nasıl sonuçlandığını anlamaya yardım eder. UPLOAD_ERR_INI_SIZE PHP yapılandırma sınırına, UPLOAD_ERR_FORM_SIZE formdaki sınıra, UPLOAD_ERR_PARTIAL ise kısmi yüklemeye işaret eder. Her durumda geçici dosyanın var olduğunu veya güvenle taşınabileceğini varsaymayın.
$file = $_FILES['belge'] ?? null;
if ($file === null || $file['error'] !== UPLOAD_ERR_OK) {
// Hata kodunu uygulama günlüğüne kaydet;
// kullanıcıya uygun ve sınırlı bir mesaj göster.
}
Örnek, önce alanın varlığını kontrol eder; başarılı yükleme kodu gelmediyse dosyayı işlemeye devam etmez. Üretim günlüğüne dosyanın içeriğini veya kullanıcıya ait hassas yolu yazmak yerine hata kodu ve istek kimliği yeterli olabilir.
UPLOAD_ERR_NO_FILE ise formda dosya seçilmediğini bildirir; bu, boyut sınırının aşıldığı anlamına gelmez. Alanın hiç gelmemesi, error kodu ve web sunucusunun 413 yanıtı ayrı gözlemlerdir. Hangi katmanın reddettiğini access/error günlükleriyle eşleştirin; uygulama seviyesinde bu senaryoları tek bir “yükleme başarısız” mesajına indirgemeyin.
PHP dışındaki 413 yanıtını da ayırın
Web sunucusu, proxy veya CDN istek gövdesini PHP'ye ulaşmadan reddedebilir. Böyle bir durumda uygulama beklediği alanları alamaz; günlükte 413 yanıtı veya ilgili katmanın gövde boyutu sınırı görülür. Yalnızca php.ini değerlerini değiştirmek, PHP-FPM arkasındaki web sunucusu ya da ters proxy limitini değiştirmez.
post_max_size aşılırsa PHP'nin davranışını ve çalıştığı SAPI ayarını ayrıca kontrol edin. Değerleri yükseltirken eşzamanlı isteklerin bellek maliyetini de düşünün; büyük dosyalar için akış, parça veya doğrudan nesne depolamaya yükleme seçenekleri gerekebilir. PHP'nin yükleme hata kodları, yaygın yükleme sorunları ve çekirdek yapılandırma yönergeleri belgelerini birlikte okuyun.
Boyut sınırını geçmek dosyayı güvenli kılmaz. İçerik türünü istemcinin bildirdiği MIME değerine göre kabul etmeyin; rastgele dosya adları, erişim denetimi ve web kökü dışı saklama gibi konular için PHP dosya yükleme güvenliği yazısındaki ayrı kontrolleri uygulayın.