在后台运行php脚本 - windows

时间:2013-11-17 18:37:00

标签: php windows background

我想运行php脚本,在另一个php页面的后台运行无限循环,而不会停止或影响调用者页面, 到目前为止我尝试过的是: 在来电者页面中:

set_time_limit(0);
ignore_user_abort(true); 
$path=realpath('./infinity.php');
$cmd='c:/xampp/php/php'.$path;
if (substr(php_uname(), 0, 7) == "Windows"){ 
   exec("start/b C:\\xampp\\php\\php $path > NUL");
} 
else { 
    exec($cmd . " > /dev/null &");   
} 

in infinity.php

set_time_limit(0);
ignore_user_abort(true); 

我的问题是,当我尝试在浏览器中打开调用者页面时,我会看到永久加载标记,页面永远不会打开!

你可以告诉我我错过了什么吗? 注意: - 我正在使用Windows 8 - 我在两个页面中都使用了set_time_limit(0)和ignore_user_abort(true),因为我不知道我猜它是如何使用的。

我知道我的问题可能会重复,但我已经尝试了所有提议的解决方案,但仍然无法打开来电者页面

感谢任何帮助

1 个答案:

答案 0 :(得分:-1)

这对我有用,但请注意这是在Linux机器上!

$cmd = "/path/to/script/to/run/in/background.php $var1 $var2";
$outputfile = '/path/to/script/output.txt';
$pidfile = '/path/to/process/id/file.txt';
$exe = exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));

这将在第一个脚本之外的shell中运行background.php。第一个脚本将继续正常运行,而不是等待background.php完成。因为脚本将在后台运行,所以在某处获取并存储PID非常重要,这样您就可以不时检查脚本。即它还在运行吗? outputfile和pidfile需要由脚本编写。

抱歉,在我意识到您在Windows环境中工作之前,我开始编写此响应!也许还有一些用处。 (也许不是..)