Paylaşımlı Hostingde PHP Limit: Yükleme Neden Kesilir?
Kullanıcı bir Excel dosyası veya birkaç fotoğraf seçer, “Yükle”ye basar ve ekran bir süre döndükten sonra ya boş bir sayfa gelir ya da form hiçbir şey olmamış gibi geri döner. Uygulama tarafında “80 MB’a kadar yükleyebilirsiniz” yazıyor olabilir; ama sunucu 8 MB’ta kapıyı kapatıyorsa yükleme sessizce düşer. Paylaşımlı hostingde çalışan PHP uygulamalarında bu, en sık karşılaşılan ve en çok zaman kaybettiren sorunlardan biridir.
Bu yazıda yüklemenin hangi limitlere takıldığını, bu limitlerin birbirine nasıl bağlı olduğunu, paylaşımlı hostingde neleri değiştirebileceğinizi ve kullanıcıya anlamlı bir hata mesajı göstermenin yollarını adım adım anlatıyoruz.
Yükleme neden “sessizce” başarısız olur?
PHP, bir form gönderildiğinde gelen veriyi uygulama koduna vermeden önce kendi limitleriyle kontrol eder. Gelen istek bu limitleri aşarsa PHP veriyi okumaz; uygulamanız boş bir $_POST ve boş bir $_FILES ile karşılaşır. Kod “form gönderilmemiş” sanır ve sayfayı yeniden gösterir. Kullanıcı açısından sonuç: hiçbir uyarı yok, dosya yok.
Bu davranışın bir yan etkisi daha vardır: CSRF koruması kullanan uygulamalarda token da $_POST içinde geldiği için, limit aşıldığında token da kaybolur ve sistem “oturum süresi doldu” veya “geçersiz istek” hatası verir. Sorunun gerçek nedeni dosya boyutu olduğu hâlde kullanıcı güvenlik hatası görür.
Yüklemeyi etkileyen PHP limitleri
Tek bir ayar yoktur; birkaç limit zincir gibi çalışır ve en küçüğü belirleyicidir.
| Ayar | Ne sınırlar? | Tipik paylaşımlı hosting değeri |
|---|---|---|
upload_max_filesize | Tek bir dosyanın en büyük boyutu | 2–64 MB |
post_max_size | Formun toplam boyutu (tüm dosyalar + alanlar) | 8–128 MB |
max_file_uploads | Tek istekte yüklenebilecek dosya sayısı | 20 |
memory_limit | Betiğin kullanabileceği bellek | 128–512 MB |
max_execution_time | Betiğin çalışma süresi | 30–300 sn |
max_input_time | İstek verisinin okunma süresi | 60 sn |
Değerler hosting firmasına ve pakete göre değişir; kendi sunucunuzdaki gerçek değeri görmek için aşağıdaki kontrol yöntemlerini kullanın.
Limitler arasındaki doğru sıralama
Ayarların birbirini desteklemesi gerekir. Genel kural şöyledir:
memory_limit>post_max_size>upload_max_filesize
post_max_size,upload_max_filesize’tan büyük olmalı. Kullanıcı aynı formda 5 fotoğraf yüklüyorsa toplam boyut tek dosya limitinin katlarına çıkar.memory_limitdaha da yüksek olmalı. Özellikle yüklenen görsel yeniden boyutlandırılıyor veya Excel dosyası okunuyorsa, dosya bellekte açıldığında disk boyutunun birkaç katı yer kaplayabilir.- Süre limitleri bağlantı hızına göre düşünülmeli. Sahadaki yavaş bir mobil bağlantıda 40 MB’lık dosya dakikalar sürebilir.
Sunucudaki gerçek değerleri nasıl görürsünüz?
Hosting panelinde yazan değer ile uygulamanın gördüğü değer her zaman aynı değildir; klasöre özel ayar dosyaları veya farklı PHP sürümleri devreye girebilir. En güvenilir yöntem, uygulamanın kendi içinden okumaktır:
- Yönetici paneline küçük bir bilgi alanı:
ini_get('upload_max_filesize')veini_get('post_max_size')değerlerini yalnızca yöneticinin göreceği bir sayfada göstermek. - Geçici
phpinfo()sayfası: Kontrol için kullanılabilir, ancak sunucu hakkında çok bilgi verdiği için işiniz bitince mutlaka silinmelidir. - Hosting panelindeki PHP seçici: cPanel’de “Select PHP Version” veya “MultiPHP INI Editor” bölümleri genellikle mevcut değerleri gösterir.
Paylaşımlı hostingde limitler nasıl değiştirilir?
Paylaşımlı hostingde ana PHP yapılandırmasına erişiminiz yoktur, ancak çoğu firma bazı değerleri değiştirmenize izin verir. Hangi yöntemin çalıştığı sunucu yapısına bağlıdır:
- Panel üzerinden: cPanel’deki PHP seçici veya INI düzenleyici en güvenli yoldur; değişiklik doğru dosyaya yazılır.
.user.inidosyası: PHP-FPM veya LiteSpeed ile çalışan sunucularda site kök dizinine konan bu dosyadaki değerler okunur. Değişikliğin etkinleşmesi birkaç dakika sürebilir..htaccessiçindephp_value: Yalnızca PHP’nin Apache modülü olarak çalıştığı sunucularda geçerlidir; diğerlerinde 500 hatasına yol açabilir. Denemeden önce yedek alın.- Destek talebi: Paket limitinin üstüne çıkmak gerekiyorsa hosting firmasından talep etmek gerekir.
upload_max_filesize ve post_max_size değerleri çalışma anında ini_set() ile değiştirilemez; çünkü istek verisi betik başlamadan önce okunur. Bu yüzden kod içinde ayarlamaya çalışmak işe yaramaz.
Sadece PHP değil: web sunucusu ve güvenlik katmanları
PHP limitlerini yükselttiğiniz hâlde yükleme hâlâ kesiliyorsa, istek PHP’ye ulaşmadan başka bir katmanda durdurulmuş olabilir:
- Web sunucusu gövde limiti: Nginx’te
client_max_body_size, LiteSpeed ve Apache’de benzer istek gövdesi limitleri vardır. Bu durumda genellikle “413 Request Entity Too Large” hatası görülür. - Güvenlik duvarı (ModSecurity/WAF): Büyük veya belirli içerikteki istekleri engelleyebilir; hata çoğu zaman 403 olarak döner.
- CDN veya proxy: Önünüzde bir CDN varsa, onun da yükleme boyutu ve zaman aşımı limitleri vardır.
Kullanıcıya anlamlı hata göstermek
Limitleri ne kadar yükseltirseniz yükseltin, bir gün biri daha büyük bir dosya seçecektir. Önemli olan sessiz başarısızlığı önlemektir:
- Tarayıcı tarafında ön kontrol: Dosya seçildiği anda boyutu JavaScript ile kontrol edip “Bu dosya 25 MB, en fazla 16 MB yükleyebilirsiniz” demek, kullanıcıyı beklemekten kurtarır.
- Boş POST tespiti: İstek POST olduğu hâlde
$_POSTve$_FILESboşsa veCONTENT_LENGTHdoluysa, bu neredeyse kesin olarakpost_max_sizeaşımıdır. Bu durumda CSRF hatası yerine “Dosya çok büyük” mesajı gösterilmelidir. $_FILES['...']['error']kodunu okumak:UPLOAD_ERR_INI_SIZE,UPLOAD_ERR_PARTIALgibi kodlar sorunun nedenini açıkça söyler; bunları kullanıcı diline çevirmek gerekir.- Limiti ekranda yazmak: Yükleme alanının altında sunucunun gerçek limitini göstermek, kullanıcı beklentisini baştan doğru kurar.
Büyük dosyalar için alternatif yaklaşımlar
Bazı işler için limit yükseltmek doğru çözüm değildir:
- Görselleri istemcide küçültmek: Telefondan çekilen 12 MB’lık fotoğraf, tarayıcıda yeniden boyutlandırılarak birkaç yüz KB’a indirilebilir. Hem yükleme hızlanır hem de disk dolmaz.
- Parçalı yükleme: Dosyayı küçük parçalar hâlinde gönderip sunucuda birleştirmek, limitlere takılmadan büyük dosya taşımanın yoludur.
- Excel yerine CSV: Büyük veri aktarımlarında CSV hem daha küçüktür hem de satır satır okunabildiği için bellek kullanımı düşer.
- Arka planda işleme: Yüklenen dosyayı hemen kaydedip ağır işlemi (dönüştürme, okuma) zamanlanmış bir görevle yapmak süre limitine takılmayı önler.
Kontrol listesi
- Uygulamanın vaat ettiği boyut ile sunucunun gerçek
upload_max_filesizedeğeri aynı mı? post_max_size, aynı formda yüklenebilecek toplam boyuttan büyük mü?memory_limit, dosya işleme sırasında yetecek kadar yüksek mi?- Yavaş bağlantılar için süre limitleri yeterli mi?
- Web sunucusu, WAF veya CDN tarafında ayrı bir limit var mı?
- Limit aşıldığında kullanıcı anlaşılır bir mesaj görüyor mu?
Sonuç
Paylaşımlı hostingde yükleme sorunlarının büyük kısmı, uygulamanın vaat ettiği değer ile sunucunun izin verdiği değerin eşleşmemesinden kaynaklanır. Limitleri doğru sırayla ayarlamak, gerçek değerleri uygulamanın içinden kontrol etmek ve limit aşıldığında kullanıcıya açık bir mesaj göstermek, hem destek taleplerini azaltır hem de sahada çalışan ekiplerin güvenini korur.
BENGU, Sakarya merkezli ERP, web tasarım ve dijital çözüm ortağıdır. Sahanıza uygun bir kurgu konuşmak isterseniz iletişim formundan yazabilirsiniz.
Projeniz mi var? Ücretsiz danışın.
Web tasarım, ERP, mobil uygulama veya dijital reklam — size en uygun çözümü birlikte bulalım.
İletişime Geç