
"Allowed memory size exhausted" hatası aldınız. Ya da büyük bir dosya yüklemeye çalıştınız ve sessizce başarısız oldu. Belki de bir içe aktarma işlemi yarıda kesildi.
Bu üç sorunun ortak kaynağı PHP yapılandırma sınırlarıdır. Bu yazı, Linux hosting ve Windows hosting hesaplarında en çok karşılaşılan PHP ayarlarını ve doğru değerleri anlatıyor.
En Kritik Beş Ayar
| Ayar | Ne kontrol eder | Aşıldığında |
|---|---|---|
| memory_limit | Bir betiğin kullanabileceği bellek | Ölümcül hata, beyaz ekran |
| max_execution_time | Betiğin çalışma süresi | İşlem yarıda kesilir |
| upload_max_filesize | Tek dosyanın boyutu | Yükleme sessizce başarısız |
| post_max_size | Tüm form verisinin boyutu | Form boş gelir |
| max_input_vars | Form alanı sayısı | Ayarlar kısmen kaydedilir |
Son satır en sinsi olanıdır: çok alanlı bir ayar sayfasını kaydettiğinizde hata almazsınız ama bazı alanlar sessizce kaydedilmez. Menü düzenleri ve büyük ayar formlarında bu sorun sık yaşanır.
Ayarlar Arasındaki İlişkiler
Bu değerler birbirinden bağımsız değildir. Yanlış kurulan ilişkiler, ayarı büyütmenize rağmen sorunun devam etmesine yol açar.
Yükleme Zinciri
Bir dosya yüklenirken üç sınır sırayla devreye girer:
- Dosya boyutu upload_max_filesize değerini aşmamalı
- Tüm istek gövdesi post_max_size değerini aşmamalı
- İşlem memory_limit içinde tamamlanmalı
Doğru sıralama şudur: post_max_size, upload_max_filesize'dan büyük olmalı; memory_limit ise ikisinden de büyük olmalı. Sadece upload_max_filesize'ı büyütmek çoğu zaman işe yaramaz.
Süre Zinciri
PHP'nin çalışma süresi sınırı tek başına yeterli değildir. Web sunucusunun da bir zaman aşımı vardır ve hangisi önce dolarsa işlem o noktada kesilir.
Uzun süren bir işlem 30 saniyede kesiliyorsa ve PHP sınırınız 300 saniyeyse, sınırı koyan web sunucusudur.
Makul Değerler
Paylaşımlı hosting ortamları için genel olarak yeterli aralıklar:
- memory_limit: Basit siteler için 128 MB, e-ticaret ve ağır eklentili kurulumlar için 256 MB genellikle yeterlidir.
- max_execution_time: Normal sayfalar için 30 saniye. İçe aktarma gibi işlemler için geçici olarak artırılabilir.
- upload_max_filesize: Yükleyeceğiniz en büyük dosyaya göre — çoğu site için 64 MB yeter.
- post_max_size: Yükleme sınırının biraz üzerinde.
- max_input_vars: Varsayılan 1000'dir; karmaşık ayar sayfalarında 3000'e çıkarmak gerekebilir.
Değerleri gereğinden yüksek tutmak zararsız değildir: yüksek bellek sınırı, hatalı bir kodun sunucu kaynaklarını tüketmesine izin verir. Paylaşımlı ortamlarda bu, hesabınızın askıya alınmasına yol açabilir.
Ayarları Nerede Değiştirirsiniz?
Hosting hesabınızda ayarları değiştirmenin birkaç yolu vardır. Öncelik sırasıyla:
- Kontrol paneli. Çoğu panelde PHP ayarları için bir arayüz bulunur. En güvenli ve kalıcı yöntemdir.
- Kendi yapılandırma dosyanız. Panelde ayar yoksa, hesabınıza özel bir PHP yapılandırma dosyası oluşturmanız gerekebilir.
- Uygulama içi tanım. Bazı uygulamalar kendi yapılandırmalarında bellek sınırı tanımlar.
- Destek talebi. Diğer yollar kapalıysa sağlayıcınızdan değişiklik isteyin.
Değişiklik sonrası mutlaka doğrulayın: bir bilgi sayfası oluşturup değerin gerçekten uygulandığını görün. Birçok kullanıcı ayarı değiştirdiğini sanır ama değer aynı kalmıştır — çünkü daha yüksek öncelikli bir tanım onu geçersiz kılmaktadır.
Panelden PHP ayarı değiştirme imkânı, paketten pakete farklılık gösterir. Bu esneklik sizin için önemliyse, paket seçerken bakılacak ölçütlerden biri budur: Linux hosting paketlerinde PHP sürüm seçimi ve ayar düzenleme genellikle panel üzerinden sunulur.
Limit Artırmak Her Zaman Doğru Değil
Sınıra takılıyorsanız ilk soru "nasıl artırırım" değil "neden bu kadar kaynak gerekiyor" olmalıdır.
- Bellek hatası bir eklentiden geliyor olabilir. Tek bir hatalı eklenti, sınırı ne yaparsanız yapın tüketir.
- Süre aşımı optimize edilmemiş sorgudan kaynaklanabilir. İndeks eklemek, süreyi artırmaktan iyidir.
- Büyük içe aktarmalar parçalanabilir. Tek seferde 50 bin kayıt yerine parçalı işlem daha sağlıklıdır.
Sınır artırmak semptomu bastırır; nedeni bulmak sorunu çözer.
Sonuç
PHP sınırları birbirine bağlıdır ve tek bir değeri büyütmek çoğu zaman yetmez. Yükleme sorunlarında sıralamayı hatırlayın: memory_limit > post_max_size > upload_max_filesize. Süre aşımlarında PHP'nin yanı sıra web sunucusu zaman aşımını da kontrol edin. Ayarı değiştirdikten sonra gerçekten uygulandığını doğrulayın — birçok "değişmiyor" şikâyetinin nedeni, daha yüksek öncelikli bir tanımın devrede olmasıdır. Ve sınıra sürekli takılıyorsanız, artırmadan önce nedenini araştırın.
Sıkça Sorulan Sorular (SSS)
"Allowed memory size exhausted" hatası ne demek?
Betik, kendisine tanınan bellek sınırını aştı. Sınırı artırmak geçici çözümdür; asıl neden genellikle hatalı bir eklenti veya çok büyük bir veri kümesini tek seferde belleğe almaya çalışan bir koddur. Önce hangi işlemde oluştuğunu tespit edin.
Yükleme limitini artırdım ama hâlâ yükleyemiyorum?
Muhtemelen post_max_size değeri hâlâ küçük. Yükleme zincirinde üç sınır vardır ve en küçüğü belirleyicidir. post_max_size, upload_max_filesize'dan büyük; memory_limit ise ikisinden de büyük olmalıdır.
İşlemim 30 saniyede kesiliyor ama PHP sınırım daha yüksek?
Sınırı koyan büyük ihtimalle web sunucusudur. PHP'nin çalışma süresi sınırının yanı sıra web sunucusunun da bir zaman aşımı vardır; hangisi önce dolarsa işlem orada kesilir. Sağlayıcınızdan bu değeri de kontrol etmesini isteyin.
Ayar sayfamda bazı alanlar kaydedilmiyor, neden?
Büyük olasılıkla max_input_vars sınırına takılıyorsunuz. Bu sınır aşıldığında hata gösterilmez, fazla alanlar sessizce yok sayılır. Karmaşık ayar sayfaları ve büyük menü yapılarında bu değeri artırmak gerekir.