Применение connection_status()
Столкнулся с задачей контроля отключения пользователя во время выполнения скрипта, и долго не мог понять почему не работает, скрипт, должным образом...
Покопавшись в мануалах восстановил правильную конфигурацию кода, итак:
Пример первый, который не будет работать:
1 2 3 4 5 6 7 |
<?php while (1) { if(connection_status() != CONNECTION_NORMAL) break; } ?> |
Казалось бы все правильно, НО для того чтобы скрипт отловил сообщение от броузера, в цикле, надо что-нибудь выводить, т.е. скрипт модифицируем в:
1 2 3 4 5 6 7 8 9 |
<?php while (1) { echo "\n"; flush(); if(connection_status() != CONNECTION_NORMAL) break; } ?> |
Опять не работает, а все дело в том, что мы забыли добавить функцию которая отменяет убийство скрипта после дисконекта, т.е. наш скрипт примет теперь такой вид:
1 2 3 4 5 6 7 8 9 10 |
<?php ignore_user_abort(true); while (1) { echo "\n"; flush(); if(connection_status() != CONNECTION_NORMAL) break; } ?> |
Вот теперь все будет работать! Ну и последний, удобный вариант, для тестов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php set_time_limit(0); ignore_user_abort(true); file_put_contents('log.txt',''); while (1) { sleep(1); echo "\n"; flush(); if(connection_status() != CONNECTION_NORMAL) { file_put_contents('log.txt',time().'|user online|'.connection_status().PHP_EOL, FILE_APPEND); break; } else { file_put_contents('log.txt',time().'|user offline|'.connection_status().PHP_EOL, FILE_APPEND); } } ?> |
Так же думаю, Вам будет интересно познакомиться с функцией: register_shutdown_function, она регистрирует функцию которая будет выполнена по завершению скрипта. Описание доступно на сайте php.net
Author: | Tags: /
| Rating:
Leave a Reply