Proc_open读取并解析输出 - 实时

时间:2011-06-24 18:17:06

标签: php

当我使用stderr输出的file.txt路径运行proc_open时,该文件每隔几秒就会不断更新,并且我正在运行的proc_open程序输出为ffmpeg。我只是想将该输出重定向到一个phpfile,在那里可以读取和解析它,但是当进程正在运行时(所以每隔几秒发送一次信息)这样我就可以更新数据库了。这可能吗? 我一直在Google上搜索几个小时,所以如果有任何专家知道如何使用这个有经验的功能,我会非常感谢任何帮助。

这会将输出放在文本doc中。如果我改为2 =>数组(“管道”,“w”)和输出的回显仅在过程结束时出现在我的屏幕上

$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","/home/g/Desktop/test.txt","a")
) ;

$cwd = './' ;
// open process /bin/sh
$process = proc_open("/usr/local/bin/ffmpeg -i /home/g/Desktop/vid.wmv /home/g/Desktop/vid.flv", $descriptorspec, $pipes, $cwd) ;

1 个答案:

答案 0 :(得分:1)

  1. 你可以像这样运行ffmpeg:

    ffmpeg ..optinons... 2>&1 | php script.php
    
  2. 但你可以输入fDERmpdg的STDERR和STDOUT

    1. 第二个正常决定:

      <?
      $cmd = 'ffmpeg -i /home/azat/Desktop/src.avi -y /home/azat/Desktop/dst.avi';
      $pipes = array();
      $descriptors = array(2 => array('file', '/tmp/atest.log', 'a'));
      
      $p = proc_open($cmd, $descriptors, $pipes);
      
      while (true) {
              sleep(1);
      
              $status = proc_get_status($p);
              if (!$status['running']) break;
      
              echo "STEEL RUN\n";
              // some manupulations with "/tmp/atest.log"
      }
      
    2. 你也可以看到这个class - 它是exec进程的包装器