Jeśli spróbujesz napisać jakiś wynik do przeglądarki w tej pętli, powinieneś odszukać skrypt, jeśli połączenie zostanie przerwane. Takie zachowanie jest zasugerował w dokumentacji dla ignore_user_abort
Gdy PHP działa jako skrypt z linii poleceń, a tty skrypt idzie się bez skrypt jest zakończony wtedy skrypt umrze następnym razem stara się pisać cokolwiek, chyba że wartość jest ustawiona na PRAWDA
Sam spróbowałem kilku eksperymentów i odkryłem, że nawet jeśli spróbujesz wypróbować jakieś wyjście przeglądarki, skrypt będzie działał, jeśli bufor wyjściowy nie jest jeszcze pełny. Jeśli wyłączysz buforowanie wyjść, skrypt przerwie się, gdy próbujesz wyjść. Ma to sens - warstwa SAPI powinna zauważyć, że żądanie zostało przerwane, gdy próbuje wysłać dane wyjściowe.
Oto przykład ...
//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);
}
To pokazuje, co powoduje przerwanie. Gdybyś miał skrypt, który byłby skłonny wejść do niekończącej się pętli bez wyjścia, możesz użyć connection_aborted(), aby sprawdzić, czy połączenie jest nadal otwarte.
Ignorujesz przerwanie przez użytkownika, nie robiąc żadnego wyjścia do klienta. – hakre