当我使用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) ;
答案 0 :(得分:1)
你可以像这样运行ffmpeg:
ffmpeg ..optinons... 2>&1 | php script.php
但你可以输入fDERmpdg的STDERR和STDOUT
第二个正常决定:
<?
$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"
}
你也可以看到这个class - 它是exec进程的包装器