我在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