Ignore_user_abort и с чем его едят

Discussion in 'PHP' started by Gifts, 30 Sep 2008.

  1. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    К примеру, есть такой скрипт
    PHP:
     @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($f128);
            }
        
    fclose($f);
        break;
    При обращении к скрипту ?get=start создается подключение к серверу. Теперь мы можем закрыть например страницу/уйти пить чай/etc.

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

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

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

    madnet Умиротворенный

    Joined:
    9 Dec 2004
    Messages:
    868
    Likes Received:
    343
    Reputations:
    423
    второй вариант невозможен.
    Проще всего делать так как писал в варианте 1, а остановку скрипта так же вызывай через переданный параметр и exit, ну а если требуется кильнуть левый скрипт с ignore_user_abort, то делай kill на pid от php процесса, хотя это зависит от метода подключения php к апачу.
     
    _________________________
    2 people like this.