【问题标题】:run php script in the background - windows在后台运行 php 脚本 - windows
【发布时间】:2013-11-17 18:37:00
【问题描述】:

我想运行 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 &");   
} 

infinity.php

set_time_limit(0);
ignore_user_abort(true); 

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

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

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

感谢任何帮助

【问题讨论】:

  • PHP 不是异步或多线程的。您的无限循环将阻止任何其他进程,直到它退出。您可以查看更适合此问题的其他技术,或说明您需要这样做的原因(我们可能会建议更好的 PHP 选项)。

标签: php windows background


【解决方案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 环境中工作之前,我开始写此回复!不过也许还是有一些用处的。 (也许不是……)

【讨论】:

  • 知道这在 linux 中而不是在 windows 中是可能的人只会来你的答案老兄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2013-01-21
相关资源
最近更新 更多