PDA

Просмотр полной версии : Ignore_user_abort и с чем его едят


Gifts
30.09.2008, 13:25
К примеру, есть такой скрипт @set_time_limit(0);
@ini_set("max_execution_time", 0);
@ignore_user_abort(1);

switch ($_GET['cmd'])
{
case 'start':
$f=fsockopen('ya.ru',80);
$status=stream_get_meta_data($f);
while (!$status['eof'])
{
sleep(1);
$status=stream_get_meta_data($f);
}
break;
case 'send':
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: ya.ru\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($f, $out);
while (!feof($f))
{
echo fgets($f, 128);
}
fclose($f);
break;
}

При обращении к скрипту ?get=start создается подключение к серверу. Теперь мы можем закрыть например страницу/уйти пить чай/etc.

Наконец мы хотим отправить в это созданное подключение, какую то информацию.

Собственно вопрос - как это реализовать и возможно ли это? Вижу только несколько путей -
1) в цикле обработки while мы делаем обращение к файлам/базе и забираем оттуда информацию которую нужно отправить.
2) Каким то образом записываем resource от созданного подключения и обращаемся с ним (возможно ли?)

P.S. ну и такой вопрос - как остановить выполнение скрипта с ignore_user_abort и set_time_limit(0) без перезапуска apache

madnet
30.09.2008, 13:58
второй вариант невозможен.
Проще всего делать так как писал в варианте 1, а остановку скрипта так же вызывай через переданный параметр и exit, ну а если требуется кильнуть левый скрипт с ignore_user_abort, то делай kill на pid от php процесса, хотя это зависит от метода подключения php к апачу.