我有一个PHP应用程序执行FFMPEG命令来编码视频,然后使用Youtube v3 API将编码的视频上传到YouTube。
我使用shell_exec执行FFMPEG操作并且运行良好。我使用AJAX调用启动整个过程的问题我需要将用户保留在我所在的页面中执行AJAX调用,我的意图是执行AJAX调用以启动整个进程并将用户重新定向到另一个页面,问题是当我重定向到另一个页面时,PHP进程是interrumped,有任何形式可以执行AJAX调用,重定向并保持PHP进程在后台运行?
答案 0 :(得分:0)
这可以通过在后台运行shell_exec中的命令来实现。这允许您的PHP进程继续而无需等待shell_exec的输出。
示例:
shell_exec('php /var/www/html/my_php_app.php > /dev/null 2>/dev/null &');
/dev/null 2>/dev/null
部分告诉bash将输出发送到null / nothing。 (无输出)
&
告诉bash在后台运行脚本/命令。 (您甚至可以在常规的ssh / bash终端中执行此操作!)
请注意,您的后台脚本现在可能一次运行多次。
如果你不想这样,(任何时候只有一个实例)你可以使用pid / lock文件。下面是一个例子,你可以在你的php脚本顶部使用shell_exec调用。
$lock_file = fopen('/var/www/html/my_php_app.pid', 'c');
$got_lock = flock($lock_file, LOCK_EX | LOCK_NB, $wouldblock);
if ($lock_file === false || (!$got_lock && !$wouldblock)) {
throw new Exception(
"Unexpected error opening or locking lock file. Perhaps you " .
"don't have permission to write to the lock file or its " .
"containing directory?"
);
}
else if (!$got_lock && $wouldblock) {
exit("Another instance is already running; terminating.\n");
}
//Continue with the script.