即使我重定向到另一个URL,我也需要一个脚本来保持PHP进程在后台运行
我有一个PHP应用程序,它执行FFMPEG命令对视频进行编码,然后使用YouTube v3 API将编码后的视频上传到YouTube即使我重定向到另一个URL,我也需要一个脚本来保持PHP进程在后台运行,php,ajax,ffmpeg,exec,shell-exec,Php,Ajax,Ffmpeg,Exec,Shell Exec,我有一个PHP应用程序,它执行FFMPEG命令对视频进行编码,然后使用YouTube v3 API将编码后的视频上传到YouTube 我使用shell_exec来执行FFMPEG操作,效果非常好。问题是我使用AJAX调用来启动整个过程,我需要让用户保持在执行AJAX调用的页面中,我的意图是执行AJAX调用来启动整个过程,并以中间方式将用户重定向到另一个页面,问题是,当我重定向到另一个页面时,PHP进程被中断,有任何形式可以执行AJAX调用、重定向并保持PHP进程在后台运行?这可以通过在后台的sh
我使用shell_exec来执行FFMPEG操作,效果非常好。问题是我使用AJAX调用来启动整个过程,我需要让用户保持在执行AJAX调用的页面中,我的意图是执行AJAX调用来启动整个过程,并以中间方式将用户重定向到另一个页面,问题是,当我重定向到另一个页面时,PHP进程被中断,有任何形式可以执行AJAX调用、重定向并保持PHP进程在后台运行?这可以通过在后台的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文件。下面是一个可以在shell_exec调用的php脚本顶部使用的示例
$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.
使用任务队列和辅助进程。我建议排队,与它交谈,并与工人争吵。