Si intenta escribir alguna salida en el navegador en ese bucle, debe encontrar que la secuencia de comandos se cancela si la conexión ha finalizado. Este comportamiento se insinúa en la documentación de ignore_user_abort
Cuando se usa PHP como un script de línea de comandos, y TTY del script va lejos sin el guión está terminado entonces el script morirá el próxima vez que intenta escribir nada, a menos que el valor se establece en TRUE
he probado unos cuantos experimentos a mí mismo, y se encontró que incluso si lo hace intentar alguna salida navegador, el guión sigue funcionando si el búfer de salida no está completa aún. Si desactiva el búfer de salida, la secuencia de comandos se cancelará cuando se intente la salida. Esto tiene sentido: la capa SAPI debe notar que la solicitud ha terminado cuando intenta transmitir la salida.
He aquí un ejemplo ...
//ensure we're not ignoring aborts..
ignore_user_abort(false);
//find out how big the output buffer is
$buffersize=max(1, ini_get('output_buffering'));
while (true)
{
sleep(1);
//ensure we fill the output buffer - if the user has aborted, then the script
//will get aborted here
echo str_repeat('*', $buffersize)."\n";
file_put_contents('/tmp/foo' , "I'm alive ".getmypid()."\n" , FILE_APPEND);
}
Eso demuestra lo que desencadena el aborto. Si tenía un script que era propenso a ingresar un bucle sin fin sin salida, puede usar connection_aborted() para probar si la conexión aún está abierta.
Está ignorando el aborto del usuario mientras no realiza ningún tipo de salida al cliente. – hakre