【发布时间】:2023-03-28 15:45:01
【问题描述】:
我在 PHP 中有一个脚本,它使用 Curl 逐个点击一长串 URL,并在最后将响应写入文件,我希望从浏览器上传列表并在背景(不让用户等待响应)。我已经尝试了以下解决方案 -
$command = "C:\wamp\bin\php\php5.5.12\php.exe ../background_process/subscribe_bg.php ".$file_temp_path;
shell_exec(sprintf('%s > /dev/null 2>/dev/null &', $command));
这会成功运行脚本,但会让浏览器等待。 (这可能会在 Linux 机器的后台运行。)
$command = "C:\wamp\bin\php\php5.5.12\php.exe ../background_process/subscribe_bg.php ".$file_temp_path;
execInBackground($command);
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
我找到了这个适用于 windows 机器的解决方案,但对我不起作用。脚本根本不执行。
请建议在 Windows 机器上使用 PHP 在后台运行长进程(不是很长 ~ 30-40 分钟)的最佳实践。
【问题讨论】:
-
谢谢你,sainiankit。这一行: pclose(popen("start /B". $cmd, "r"));为我工作。我在 Windows 7 上运行 PHP 5.3。
-
The script does not execute at all.- 实际上它会,但只要父进程(http请求)完成它就会死掉。 background job implementation(或在紧要关头 forking)过于宽泛,无法在 Stackoverflow 上进行描述 - 但这正是您所要求的。
标签: php background-process asynchronous