我在PHP中有一个脚本,它使用Curl逐个打击一长串URL并在最后将响应写入文件,我希望从列表中上传列表一个浏览器,并在后台执行其余的处理(而不会让用户等待响应)。我已经尝试了以下解决方案 -在Windows机器上长时间运行PHP的后台进程
$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机器,但对于me.The脚本不起作用根本不会执行。
请在Windows机器上使用PHP在后台建议运行一个很长的过程(不是很长〜30-40分钟)的最佳实践。
谢谢你,sainiankit。这行:pclose(popen(“start/B”。$ cmd,“r”));为我工作。我在Windows 7上运行PHP 5.3。 – kdanylo 2015-09-13 13:04:35
'脚本根本不执行。' - 实际上,只要父进程(http请求)执行就会死掉。一个[后台工作实施](https://www.google.com/search?q=php+background+job+queue&oq=php+background+job+queue)(或在捏[forking](http:// php.net/manual/en/function.pcntl-fork.php))太宽泛,无法在Stackoverflow上描述 - 但这就是你要求的。 – AD7six 2015-09-13 13:14:57