Autor Zpráva
David Klouček
Profil
Nefunguje mi ignore_user_abort(), schválně si spusťte skript:

ignore_user_abort(FALSE);
set_time_limit(0);

while (true) {
    file_put_contents('test.txt', date('H:i:s'));
    sleep(3);
}

Pak dejte v prohlížeči Přerušit načítání. Asi už před pěti minutama jsem to udělal, ale čas v souboru se mi pořád aktualizuje. Musel bych jedinně vypnout Apache. Je tam někde nějaká chyba, nebo jsem to špatně pochopil?
Chro
Profil
Podle manuálu bych dal TRUE místo FALSE.

EDIT: Nepochopil jsem problém a napsal jsem hloupost.
Tori
Profil
David Klouček:
Sice se v manuálu píše „[If value is set to TRUE, then] the script will die the next time it tries to write anything“ ... nicméně dál stojí taky: „PHP will not detect that the user has aborted the connection until an attempt is made to send information to the client. Simply using an echo statement does not guarantee that information is sent, see flush().
Takže „zápisem“ se v první citaci zřejmě myslí pouze zápis na výstup, nikoli na disk. Schválně zkuste týž příklad, ale mezi file_put_contents a sleep přidejte ještě nějaké echo "cosi";
David Klouček
Profil
Tori:
To jsem zkoušel a nefungovalo to. A když zkoušim do toho souboru zapsat connection_status(), vždycky je to 0.
SpatnaKlavesnice
Profil *
A za to echo ještě flush(), viz citace.
David Klouček
Profil
SpatnaKlavesnice:
No jo vlastně, funkční kód:

ignore_user_abort(FALSE);
set_time_limit(0);
 
while (TRUE) {
    file_put_contents('test.txt', date('H:i:s'));
    echo "\n";
    ob_flush();
    flush();
    sleep(2);
}

Díky za rady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: