我需要在后台保留一个 PHP 进程 运行 即使我重定向到另一个 URL
I need a to keep a PHP process running in background even If I redirect to another URL
我有一个 PHP 应用程序可以执行 FFMPEG 命令对视频进行编码,然后使用 Youtube v3 API 将编码后的视频上传到 YouTube。
我正在使用 shell_exec 执行 FFMPEG 操作并且非常有效 well.The 问题是我使用 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 运行 script/command。 (您甚至可以在常规 ssh/bash 终端中执行此操作!)
Note that it is possible that your background script can now be running more than once at a time.
如果你不想这样,(一次只有一个实例)你可以使用 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.
我有一个 PHP 应用程序可以执行 FFMPEG 命令对视频进行编码,然后使用 Youtube v3 API 将编码后的视频上传到 YouTube。
我正在使用 shell_exec 执行 FFMPEG 操作并且非常有效 well.The 问题是我使用 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 运行 script/command。 (您甚至可以在常规 ssh/bash 终端中执行此操作!)
Note that it is possible that your background script can now be running more than once at a time.
如果你不想这样,(一次只有一个实例)你可以使用 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.