2011-03-29 199 views
0

美好的一天。从php脚本执行linux命令

我需要发送一个请求到一个脚本,然后执行一些命令(基本上我需要点击链接时启动ffmpeg)。

我尝试这样做:

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"); 

在这两种情况下,我得到了超时。任何1可以帮助我吗?谢谢。

+0

注意:似乎在运行shell变体之后,无论我做什么,我都会发生超时:|所以......任何一个也可以添加一个笔记我如何修复我的PHP解析器? (如果不是我只是重新安装apache) – zozo 2011-03-29 08:58:10

回答

1

你可以试试这个,它已经发布的用户巴赫里在巴赫里点信息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); 
    } 
?> 
+0

我会在一分钟内尝试它...刚修复apache后:)。 – zozo 2011-03-29 09:03:43

1

PHP手册条目的注释。如果这只是一个超时错误,请尝试将参数或者set_time_limit (XX);在你的代码之上。 xx对应于以秒为单位等待的时间。

把0表示没有时间限制,但如果你的脚本进入无限循环,如果它正在等待来自从未收到您的编码命令的反馈,可能是无穷无尽...