2009-07-04 2 views
4

Если я создаю поток данных для отправки в браузер, и пользователь закрывает браузер, могу ли я сказать в PHP, что мне не нужно беспокоиться о генерации или отправке остальной части потока? Я хотел бы, чтобы вставить что-то в этом цикле:Может ли PHP сказать, когда браузер уйдет?

while (!feof($pipes[1])) { 
    echo fgets($pipes[1]); 
} 

Мой план отступления должен иметь браузер использовать OnUnload JavaScript, чтобы ударить другого PHP страницу, чтобы убить процесс, который генерирующий данные, но было бы чище, если PHP может сказать, когда я эхом отдаляюсь.

ответ

10

По умолчанию PHP отменит сценарий, если пользователь переместится. Однако есть моменты, когда вы не хотите, чтобы это произошло, поэтому php имеет установленную вами конфигурацию с именем ignore_user_abort.
http://php.net/manual/en/misc.configuration.php

1

Там также функция называется register_shutdown_function(), которая предположительно выполняется, когда выполнение останавливается. Я никогда не использовал его, поэтому я не буду ручаться за то, как хорошо он работает, но я думал, что упомянул об этом для полноты.

+0

Закрыть, но в этом случае он просто хочет прекратить обработку данных на прерывание пользователя. – Ballsacian1

1

Я считаю, что скрипт будет автоматически отменен при нормальной загрузке (нет ajax). Но если вы хотите реализовать какой-то длинный опрос через php, используя xmlhttprequest, я думаю, вам придется делать это с помощью своего рода javascript, потому что php не может его обнаружить. Также хотелось бы знать точный случай.

0

Эти ответы указали мне на то, что я искал. Основной процесс требует особого внимания, чтобы убить его. Мне нужно было выпрыгнуть из петли. Еще раз спасибо, переполнение стека.

while (!feof($pipes[1]) && !connection_aborted()) 
{ 
    echo fgets($pipes[1]); 
} 

if (connection_aborted()) 
{ 
    exec('kill -4 '.$mypid); 
} 
Смежные вопросы