Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使我重定向到另一个URL,我也需要一个脚本来保持PHP进程在后台运行_Php_Ajax_Ffmpeg_Exec_Shell Exec - Fatal编程技术网

即使我重定向到另一个URL,我也需要一个脚本来保持PHP进程在后台运行

即使我重定向到另一个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

我有一个PHP应用程序,它执行FFMPEG命令对视频进行编码,然后使用YouTube v3 API将编码后的视频上传到YouTube


我使用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.

使用任务队列和辅助进程。我建议排队,与它交谈,并与工人争吵。