我正在尝试管理等待ffmpeg处理的文件队列。使用CRON运行页面,该CRON运行通过等待处理的文件数据库。然后,该页面构建命令并使用exec()
将它们发送到命令行。
但是,当从命令行或CRON运行PHP页面时,它会运行exec()
确定,但不会返回到PHP页面以继续更新数据库和其他功能。
示例:
<?php
$cmd = "ffmpeg inpupt.mpg output.m4v";
exec($cmd . ' 2>&1', $output, $return);
//Page continues...but not executed
$update = mysql_query("UPDATE.....");
?>
从命令行运行此页面时,将使用exec()
运行该命令,但不会执行页面的其余部分。我认为问题可能是我在从命令行运行的页面中使用exec()
运行命令。
是否可以从包含exec()
的命令行中完整运行PHP页面?
或者有更好的方法吗?
谢谢。
答案 0 :(得分:3)
我前段时间写了一篇关于Running a Background Process from PHP on Linux的文章:
<?php system( 'sh test.sh >/dev/null &' ); ?>
注意最后的&
运算符。这将启动一个过程,该过程立即将控制权返回给shell并在后台继续运行。
更多例子:
<!--
saving standard output to a file
very important when your process runs in background
as this is the only way the process can error/success
-->
<?php system( 'sh test.sh >test-out.txt &' ); ?>
<!--
saving standard output and standard error to files
same as above, most programs log errors to standard error hence its better to capture both
-->
<?php system( 'sh test.sh >test-out.txt 2>test-err.txt &' ); ?>
答案 1 :(得分:2)
您是否尝试过使用CURL?
答案 2 :(得分:1)
不确定,但可能是由于cron进程的shell限制,如果它作为一个网页,然后将其用作网页,设置一个调用wget wherever_your_page_is
的cron作业,它将通过您的Web服务器调用并且应该模仿你的测试。