Korkunç hata mesajıyla karşılaştım, muhtemelen zahmetli bir çabayla, PHP'de bellek kalmadı:
123. satırdaki file.php dosyasında #### baytlık izin verilen bellek boyutu tükendi (#### bayt ayırmaya çalıştı)
Sınırı artırmak
Ne yaptığınızı biliyorsanız ve sınırı artırmak istiyorsanız memory_limit'e bakın :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Dikkat! Sorunu değil, yalnızca belirtiyi çözüyor olabilirsiniz!
Sızıntının teşhisi:
Hata mesajı, bellek sızdırdığına ya da gereksiz yere biriktirdiğine inandığım bir döngüye sahip bir çizgiye işaret ediyor. memory_get_usage()
Her yinelemenin sonunda ifadeler yazdırdım ve sayının sınıra ulaşana kadar yavaşça arttığını görebiliyorum:
foreach ($users as $user) {
$task = new Task;
$task->run($user);
unset($task); // Free the variable in an attempt to recover memory
print memory_get_usage(true); // increases over time
}
Bu sorunun amaçları doğrultusunda, akla gelebilecek en kötü spagetti kodunun $user
veya içinde bir yerde küresel kapsamda saklandığını varsayalım Task
.
Hangi araçlar, PHP hileleri veya hata ayıklama voodoo sorunu bulup düzeltmeme yardımcı olabilir?