解析输出2>&;1使用php脚本

解析输出2>&;1使用php脚本,php,linux,Php,Linux,我使用exec命令使ffmpeg工作 $process = exec("/usr/local/bin/ffmpeg -i /home/g/Desktop/cave.wmv -deinterlace -acodec libfaac -ab 96k -ar 44100 -vcodec libx264 -s 480x320 -f flv /home/g/Desktop /file.flv 2>&1 | php testing123.php") ; 在testing123.php中,我

我使用exec命令使ffmpeg工作

$process = exec("/usr/local/bin/ffmpeg -i /home/g/Desktop/cave.wmv -deinterlace 
-acodec libfaac -ab 96k -ar 44100 -vcodec libx264 -s 480x320 -f flv /home/g/Desktop
/file.flv 2>&1 | php testing123.php") ;
在testing123.php中,我使用了

$h = fopen('php://stdin', 'r'); $str = fgets($h); fclose($h);
//topic removed

 $sql = 'INSERT INTO table
(id,status) VALUES(?,?)';
$stmt3 = $conn->prepare($sql);
$result=$stmt3->execute(array(rand(),$str));

但是,正如您可能猜到的,只有当文件最初从另一个文件中的exec命令执行时,我才得到一个数据库条目是否有办法继续执行文件或其他内容,以便每隔几秒钟就可以将输入文件的输出插入我的数据库?

您需要使用
while
循环。文档中有一些示例

$h = fopen('php://stdin', 'r');

while ( ($str = fgets($h)) !== false )
{
  $sql = 'INSERT INTO ...';

  mysql_query($sql);
}

fclose($h);

文档中的一条评论建议使用
stream\u get\u line
而不是
fgets
。如果您感兴趣,这里有一个直接链接:。

漂亮的朋友。我爱你。这件事已经搞了一段时间了。还有两个问题。你觉得这个效率如何?假设我有多个脚本执行这个过程。另外,为了控制被解析信息的间隔,你会使用sleep吗?@Scarface-我认为多个脚本同时执行同一个PHP脚本没有任何问题。至于时间间隔,恐怕你无法控制什么。信息通过管道传输到脚本中,因此
ffmpeg
二进制文件将是需要睡眠的文件。当你读台词的时候插入没有错。您可以考虑的是将数组插入到数组中,一旦代码> FFMPEG运行完毕,PHP脚本可以慢慢地循环通过数组并将数据插入到数据库中。我之所以担心睡眠,是因为我认为如果我可以睡眠并延迟数据,将节省处理时间,但由于这是不可能的,我可以使用正则表达式对信息进行排序,以获得进度并更新数据库条目。这会给系统带来压力吗?@Scarface-我想应该没问题。再次感谢弗朗索瓦。你是最棒的。