Ho riscontrato il temuto messaggio di errore, forse attraverso uno sforzo scrupoloso, PHP ha esaurito la memoria:
Dimensione della memoria consentita di #### byte esauriti (si è tentato di allocare #### byte) in file.php alla riga 123
Aumentare il limite
Se sai cosa stai facendo e vuoi aumentare il limite vedi memory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Attenti! Potresti solo risolvere il sintomo e non il problema!
Diagnosi della perdita:
Il messaggio di errore indica una linea all'interno di un ciclo che credo stia perdendo o accumulando inutilmente memoria. Ho stampato memory_get_usage()dichiarazioni alla fine di ogni iterazione e posso vedere il numero crescere lentamente fino a raggiungere il limite:
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
}
Ai fini di questa domanda, supponiamo che il peggior codice di spaghetti immaginabile si nasconda in ambito globale da qualche parte in $usero Task.
Quali strumenti, trucchi PHP o voodoo di debug possono aiutarmi a trovare e risolvere il problema?
