İçeriğe geç
Yapılandırma

WordPress'te Maksimum Dosya Yükleme Boyutunu Artırma

WordPress upload limitinizi üç ayar birlikte belirler ve hepsinin uyumlu olması gerekir. Geçerli limit; upload_max_filesize, post_max_size ve web sunucunuzun istek sınırından en küçük olanıdır.

Yayınlandı

WordPress upload limitinizi üç ayar birlikte belirler ve hepsinin uyumlu olması gerekir. Geçerli limit; upload_max_filesize, post_max_size ve web sunucunuzun istek sınırından en küçük olanıdır. Birini yükseltip diğer ikisini düşük bırakırsanız hiçbir şey değişmez — çoğu insanın yaptığı düzeltmenin “işe yaramadığı” sonucuna varmasının nedeni tam olarak budur. Önce mevcut değerlerinizi WordPress maksimum dosya yükleme boyutu aracıyla kontrol edin; araç, WordPress’in bildirdiği değerlerin aynısını okur ve hangisinin sizi engellediğini gösterir.

Limit neden var ve nerede tanımlı

Upload limitini WordPress belirlemez. Sadece bildirir. “The uploaded file exceeds the upload_max_filesize directive in php.ini” mesajını gördüğünüzde, bu mesaj doğrudan PHP’den gelir.

Bir yüklemeyi üç ayrı değer denetler ve gerçek tavan bunlardan en düşük olanıdır:

  • upload_max_filesize (PHP) — PHP’nin kabul edeceği en büyük tek dosya.
  • post_max_size (PHP) — en büyük toplam POST gövdesi. Dosyanız, diğer form alanlarıyla birlikte POST isteğinin içinde taşınır; bu yüzden bu değer upload_max_filesize değerinden büyük olmalıdır.
  • Web sunucusunun gövde limiti — Nginx’te client_max_body_size, Apache’de LimitRequestBody. Bu değer tamamen PHP’nin dışında yaşar; Nginx arkasında yalnızca PHP’ye yönelik düzeltmelerin sessizce başarısız olmasının nedeni de budur.

Dördüncü bir değer olan max_execution_time boyutu sınırlamaz ancak zayıf bir bağlantıda yavaş ilerleyen büyük bir yüklemeyi aktarım ortasında iptal edebilir. Bu ayrı bir belirtidir, boyut tavanının bir parçası değildir.

Tuzak şu: upload_max_filesize = 256M yapıyorsunuz, yeniden yüklüyorsunuz, yine de 100 MB’lık bir dosyayı yükleyemiyorsunuz — çünkü post_max_size hâlâ 8M. PHP, dosyayı incelemeye bile başlamadan isteği toplam gövde üzerinden reddeder. Limit sizi görmezden gelmedi. Başka bir limit onu önce yakaladı.

Nasıl düzeltilir, sırasıyla

En kalıcı çözümden en son çareye doğru ilerleyin.

1. php.ini dosyasını düzenleyin (doğru yer). Sitenizin gerçekten yüklediği dosyayı bulun — <?php phpinfo(); içeren bir sayfa çalıştırıp “Loaded Configuration File” satırını okuyun ya da hosting sağlayıcınıza sorun. Her iki PHP değerini de ayarlayın ve post_max_size değerini upload_max_filesize değerinden büyük tutun:

upload_max_filesize = 256M
post_max_size = 260M
max_execution_time = 300

PHP-FPM’i (sudo systemctl restart php8.2-fpm) veya Apache’yi yeniden başlatın. PHP süreci yeniden başlamadan değişiklikler hiçbir işe yaramaz.

2. php.ini erişiminiz yok mu? .htaccess kullanın (yalnızca Apache + mod_php). WordPress kök dizininizdeki .htaccess dosyasına ekleyin:

php_value upload_max_filesize 256M
php_value post_max_size 260M
php_value max_execution_time 300

Bu yalnızca PHP bir Apache modülü olarak çalıştığında işe yarar. PHP-FPM, CGI veya FastCGI altında php_value bir 500 hatası fırlatır — bu hata, sayının yanlış olduğu değil, yanlış yolda olduğunuz anlamına gelir. .user.ini dosyasına geçin:

upload_max_filesize = 256M
post_max_size = 260M

3. Web sunucusu limitini yükseltin — herkesin unuttuğu adım. Nginx’te PHP, boyutu aşan bir isteği görmez bile; Nginx önce 413 Request Entity Too Large döndürür. Sunucu bloğunuzda:

client_max_body_size 256M;

sudo nginx -t && sudo systemctl reload nginx ile yeniden yükleyin. Nginx kullanıyorsanız ve PHP düzenlemeleriniz “hiçbir işe yaramadıysa” neredeyse her zaman sebep budur.

Herhangi bir değişiklikten sonra bildirilen değerleri yeniden kontrol edin. Maksimum dosya yükleme boyutu aracı size yeni geçerli tavanı söyler ve kurulumunuza özel tam kod parçasını üretir; böylece üçünden hangisinin hâlâ düşük olduğunu tahmin etmek zorunda kalmazsınız.

Yapılmaması gerekenler

wp-config.php dosyasını düzenleyip limitin kalkmasını beklemeyin. Yaygın olarak kopyalanan şu satır, blog yazılarının iddia ettiği şeyi yapmaz:

@ini_set( 'upload_max_filesize' , '256M' );

upload_max_filesize bir PHP_INI_PERDIR değeridir. ini_set() ile çalışma zamanında PHP içinden değiştirilemez. Yalnızca php.ini, .htaccess veya .user.ini dosyalarından yeni değer kabul eder — asla uygulama kodundan değil. Bu satır hatasız çalışır ve hiçbir şey yapmaz; bu da onu WordPress dünyasında en özgüvenli biçimde tekrarlanan yanlış tavsiyelerden biri yapar.

@ini_set('post_max_size', ...) satırını da yapıştırmayın — aynı kısıtlama, aynı sessiz etkisizlik.

WP_MEMORY_LIMIT değerini ayarlayıp bunu upload limiti sanmayın. O değer, çalışan kod için PHP’nin bellek tavanını kontrol eder. Sunucunun ne kadar büyük bir dosya kabul ettiğiyle ilgisi yoktur.

Tek bir dosyada durmayın. En sık görülen hata, yalnızca upload_max_filesize değerini değiştirip düzeltmenin bozuk olduğunu ilan etmektir. Üçünü de değiştirin ve post_max_size değerini upload_max_filesize değerinin üzerinde tutun.

“Garanti olsun” diye limitleri abartılı yüksek ayarlamayın. 2 GB’lık bir limit, kaynak tükenmesi sorunlarını davet eder ve işe yaramaz — gerçekten gigabaytlarca büyüklükte dosyalara ihtiyacınız varsa, onları tek bir PHP POST’undan zorla geçirmek yerine tarayıcının dışından yükleyin (SFTP veya parçalı yükleme yapan bir eklenti).

Hâlâ takıldınız mı?

Üç değeri de yükselttiniz ama yine de bir duvara toslıyorsanız, istek sunucunuzun daha yukarısındaki bir yerde sınırlanıyor demektir: bir CDN ya da proxy (Cloudflare’in kontrol paneli yükleme gövdesi boyutunu kendi başına sınırlar), php.ini dosyanızı görmezden gelen yönetimli bir hostun platform limiti ya da henüz yenilenmemiş bir .user.ini dosyası — bu dosya PHP’nin user_ini.cache_ttl değerine uyar, dolayısıyla kaydettikten sonra birkaç dakika gecikebilir. Bir dosyaya ne yazdığınıza değil, sunucunun gerçekte ne bildirdiğine bakın ve hâlâ düşük olan katmanı düzeltin. Bildirilen sayı nihayet hedefinizle eşleştiğinde, yükleme çalışır.