Encontrei a temida mensagem de erro, possivelmente devido a um esforço meticuloso, o PHP ficou sem memória:
Tamanho de memória permitido de #### bytes exauridos (tentou alocar #### bytes) em file.php na linha 123
Aumentando o limite
Se você sabe o que está fazendo e deseja aumentar o limite, consulte memory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Cuidado! Você pode estar resolvendo apenas o sintoma e não o problema!
Diagnosticando o vazamento:
A mensagem de erro aponta para uma linha dentro de um loop que acredito estar vazando, ou acumulando desnecessariamente, memória. Imprimi memory_get_usage()
declarações no final de cada iteração e posso ver o número crescer lentamente até atingir o 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
}
Para o propósito desta pergunta, vamos supor que o pior código espaguete imaginável está escondido no escopo global em algum lugar em $user
ou Task
.
Quais ferramentas, truques de PHP ou vodu de depuração podem me ajudar a encontrar e corrigir o problema?