[PHP]Слежка за тем что выводит запущенный процесс в консоль

Discussion in 'PHP' started by Kuzya, 15 Dec 2009.

  1. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Здравствуйте. Заинтересовала меня следующая вещь. Можно ли как-то через PHP запустить wget, и при этом следить за всем что он выводит?
    То есть запустил скачивать фильм например, и с помощью AJAXa на страчке постоянно обновляется то? что выводит wget (кол-во скачанных процентов, скорость)?
     
  2. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    800
    Likes Received:
    145
    Reputations:
    73
    PHP:
    <?php
    echo system("wget ...");
    ?>
    Вывод можешь парсить и извращаться как хочешь )))
     
  3. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Проблема в том что результат ты не будеш получать порциями, это нужно внедрятся в сам процесс, а пыхе насколько знаю нет такой возможности.
     
    _________________________
  4. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    >> Проблема в том что результат ты не будеш получать порциями
    Ага, вот с этим я и думаю как справится...Наверное придётся запускать wget с опцией ведения лога и из него как-то формировать отчёт в веб-часть.
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Проблема не в порционности, а в асинхронности пхп. К примеру постепенный вывод wget'а (в приделах пхп) можно получать так:
    PHP:
    $proc popen('wget http://some_url 2>&1','rb');
    while (!
    feof($proc))
    {

        
    $data=fgets($proc,100);
        
    // \r нужно чтобы строка каждый раз затиралась
        
    echo "\r".trim($data);

    }
    pclose($proc);
    Проблема только куда это записывать, чтобы аяксом считывать и скидывать в браузер. Например можно через файлы:
    PHP:
    $i=0;
    $proc popen('wget http://some_url 2>&1','rb');
    // Открываем некоторый файл, в дальнейшем аяксом его читаем
    $f fopen('test_popen.txt','wb');

    while (!
    feof($proc))
    {
        for(
    $j=0;$j<50;$j++) $data=fgets($proc);
        
    fwrite($f"Line number:".($i++).' = '.trim($data).'                                       ');
        
    fflush($f);rewind($f);
    }
    fclose($f);
    pclose($proc);
    Тут не учтены гонки при чтении/записи.
     
    _________________________
    3 people like this.
  6. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Gifts, большое спасибо! Именно то что нужно!