выполнять команды Linux из PHP-скриптов - PullRequest
0 голосов
/ 29 марта 2011

Всем доброго времени суток.

Мне нужно отправить запрос в скрипт и затем выполнить некоторые команды (в основном мне нужно запустить ffmpeg при нажатии на ссылку).

Iпопробовал это:

exec("ffserver &");
exec("ffmpeg -i pipe.avi output.avi");
exec("mplayer -dumpstream someinput -dumpfile pipe.avi");

и это

shell_exec("ffserver &");
shell_exec("ffmpeg -i pipe.avi output.avi");
shell_exec("mplayer -dumpstream someinput -dumpfile pipe.avi");

В обоих случаях я получил тайм-аут.Может ли any1 помочь мне с этим?Спасибо.

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Если это только ошибка тайм-аута, попробуйте установить set_time_limit (xx); поверх вашего кода. С xx, соответствующим времени ожидания в секундах.

Установка 0 означает отсутствие ограничения по времени, но он может быть бесконечным, если ваш скрипт входит в бесконечный цикл, или если он ожидает обратной связи от вашей команды кодирования, которая никогда не поступит ...

1 голос
/ 29 марта 2011

Попробуйте увеличить время выполнения PHP-скрипта в файле php.ini или установив функцию set_time_limit

1 голос
/ 29 марта 2011

Вы можете попробовать это, он был опубликован пользователем bahri в bahri dot info в качестве комментария к записи PHP вручную для exec

<?php
  function PsExecute($command, $timeout = 60, $sleep = 2) {
        // First, execute the process, get the process ID

        $pid = PsExec($command);

        if( $pid === false )
            return false;

        $cur = 0;
        // Second, loop for $timeout seconds checking if process is running
        while( $cur < $timeout ) {
            sleep($sleep);
            $cur += $sleep;
            // If process is no longer running, return true;

           echo "\n ---- $cur ------ \n";

            if( !PsExists($pid) )
                return true; // Process must have exited, success!
        }

        // If process is still running after timeout, kill the process and return false
        PsKill($pid);
        return false;
    }

    function PsExec($commandJob) {

        $command = $commandJob.' > /dev/null 2>&1 & echo $!';
        exec($command ,$op);
        $pid = (int)$op[0];

        if($pid!="") return $pid;

        return false;
    }

    function PsExists($pid) {

        exec("ps ax | grep $pid 2>&1", $output);

        while( list(,$row) = each($output) ) {

                $row_array = explode(" ", $row);
                $check_pid = $row_array[0];

                if($pid == $check_pid) {
                        return true;
                }

        }

        return false;
    }

    function PsKill($pid) {
        exec("kill -9 $pid", $output);
    }
?>
...