PHP Önemli Hatalar Nasıl Çözülür?: 8388608 baytlık bellek boyutu izin verildi

PHP kodlayıcılarının karşılaştığı en yaygın ve rahatsız edici hatalardan biri: “Önemli hata: İzin verilen 8388608 baytlık bellek boyutu…”, ardından “(XXXX bayt ayırma)” /home/www/file.module satırında 12. ”Bu ölümcül PHP hatası, varsayılan olarak PHP'nin, herhangi bir komut dosyası için 8 MB'lık bir bellek kullanım sınırına sahip olduğu için kırpıyor. Aslında bu iyi bir şey, çünkü hileli bir PHP betiğinin, sunucunuzu tüm belleği kapatarak geri getirmesini istemiyorsunuz. Ancak bazen, normalde 8 MB sınırını aşan bir PHP betiğine sahip olacaksınız ( örneğin, almak veya yüklemek için ). Geçici çözüm için “Önemli hata: İzin verilen 8388608 baytlık bellek boyutu…” hata mesajı, bu kod satırını en üstteki komut dosyasına eklemeniz yeterlidir:

ini_set (“memory_limit”, ” 16M “);

Bu hafıza limitinizi 8 MB yerine 16 MB'ye ayarlayacaktır. Bu sayı ile uğraşabilir ve yapabilmeniz için, bu hata mesajını tekrar etmeden olabildiğince düşük olmasını sağlayabilirsiniz. Bu sadece belirli bir PHP dosyası için hafıza limitini değiştirecektir.

Alternatif olarak, php.ini dosyanızı hafıza sınırına getirebilirsiniz. Bu, sunucunuzdaki tüm komut dosyalarını etkileyecektir. Sadece php.ini dosyasını açın ve “memory_limit” yazan satırı bulun ve değiştirin:

memory_limit = 16 M

Kendi PHP.ini dosyasında, benim varsayılanımın 128M'de daha yüksek olduğunu fark ettim. Yani, eğer bu hata mesajını alsaydım, şöyle yazdı: “Ölümcül hata: 134217728 baytlık hafıza boyutu izin verildi…” ve açıkçası çok daha büyük bir problem olacaktır. Ancak, "Önemli hata: 8388608 bayttan izin verilen bellek boyutu…" veya "Önemli hata: 16777216 baytlık bellek boyutu izin veriliyor…" veya her neyse, aynı geçici çözümle aynıdır. Görünüşe göre, memory_limit varsayılanı PHP 5.2.0'da 8M'den 16M'ye yükseltildi ve PHP 5.3.0 için 128M oldu, bu da neden bu hata mesajını alamayacağınızı açıklıyor.

Ayrıca, bellek limitini PHP.ini dosyasında memory_limit değerini –1'e ayarlayarak da kapatabilirsiniz.

memory_limit = -1

Bu, belli nedenlerden dolayı, genellikle iyi bir fikir değildir.

Not: .htaccess sayfanızdaki memory_limit satırını da kullanabilirsiniz.

Şimdi, unutmayın, bu sadece bir çözümdür. Gerçekten de, PHP betikiniz dosya yükleme ya da çok fazla bellek kullanımı gerektiren başka bir şey yapmadığınız sürece 8 MB'yi geçmemelidir. Gerçekten yapman gereken, senaryonun neden bu kadar çok bellek kullandığını anlamaya çalışmak ve düzeltmeye çalışmaktır. PHP betiğinizin ne kadar bellek kullandığını anlamanın bir yolu, memory_get_usage () PHP işlevini kullanmaktır. Hafıza kullanımınızın nerede büyüdüğünü öğrenmek için betiğinizdeki herhangi bir noktayı yanınızda getirin:

echo memory_get_usage ();

Bu hata mesajını Drupal veya Joomla'da alıyorsanız, muhtemel suçlu yeni bir modül veya pakettir. Örneğin, Drupal'da admin / modules sayfası, Drupal kurulumunuzdaki her modülü yükler. Bu, özel bir modül buggy, bozuk veya hacklenmişse, tüylerinize girebilir. Partiyi hangi tarafa getirdiğini belirlemek için modülleri tek tek devre dışı bırakmayı deneyin. Ayrıca, bazı barındırma sağlayıcıları PHP kodunuzun bellek sınırlarını değiştirme girişimlerinizi görmezden gelecektir, böylece size yardımcı olmak için barındırma desteğinizle iletişime geçmeniz gerekebilir. Bazen php.ini dosyasını düzenlemem gerekiyor ve bazen kodu .htaccess dosyasına koydum. Her iki durumda da, umarım buradaki bilgi sizi yolda almak için yeterlidir!