即使我重定向到另一个URL,我还需要在后台运行PHP进程

时间:2018-05-24 16:26:29

标签: php ajax ffmpeg exec shell-exec

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

我使用shell_exec执行FFMPEG操作并且运行良好。我使用AJAX调用启动整个过程的问题我需要将用户保留在我所在的页面中执行AJAX调用,我的意图是执行AJAX调用以启动整个进程并将用户重新定向到另一个页面,问题是当我重定向到另一个页面时,PHP进程是interrumped,有任何形式可以执行AJAX调用,重定向并保持PHP进程在后台运行?

1 个答案:

答案 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.