Saya telah menemukan pesan kesalahan yang ditakuti, mungkin melalui upaya yang melelahkan, PHP kehabisan memori:
Ukuran memori yang diizinkan dari #### byte habis (mencoba mengalokasikan #### byte) di file.php pada baris 123
Meningkatkan batas
Jika Anda tahu apa yang Anda lakukan dan ingin meningkatkan batasnya, lihat memory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Awas! Anda mungkin hanya menyelesaikan gejalanya dan bukan masalahnya!
Mendiagnosis kebocoran:
Pesan kesalahan menunjuk ke sebuah baris dalam sebuah loop yang saya yakini telah bocor, atau terakumulasi secara tidak perlu, memori. Saya telah mencetak memory_get_usage()
pernyataan di akhir setiap iterasi dan dapat melihat jumlahnya perlahan-lahan bertambah hingga mencapai batas:
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
}
Untuk keperluan pertanyaan ini, mari kita asumsikan kode spaghetti terburuk yang bisa dibayangkan bersembunyi dalam lingkup global di suatu tempat di $user
atau Task
.
Alat, trik PHP, atau debugging voodoo apa yang dapat membantu saya menemukan dan memperbaiki masalah?