【问题标题】:php background process in windows environmentwindows环境下php后台进程
【发布时间】:2013-02-11 10:22:13
【问题描述】:

我正在使用 windows-7 操作系统和 wamp 服务器。 我有 2 个 php 文件 trigger.php,background.php。 我想在后台运行 background.php。我必须从 trigger.php 调用这个文件。

我尝试了以下方法。

我在 trigger.php 中添加了这段代码

    $WshShell = new COM("WScript.Shell");
   $oExec = $WshShell->Run("C:\wamp\bin\php\php5.3.5\php-win.exe -f C:/wamp/www/background.php", 0, false);

但我的 background.php 没有被调用。

我该怎么做?

欢迎提出任何建议。

【问题讨论】:

  • 确保正确安装了 Windows Script Host,如果您使用 IIS,请检查 COM 的安全设置。请参考 MS 网站

标签: php


【解决方案1】:
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
}

在这种情况下,您的 $cmd 将是 "php C:/wamp/www/path/to/background.php"

【讨论】:

  • 感谢回复 krishnanunni。在你的函数中我应该在哪里包含调用我的文件 background.php 的代码,$cmd 是什么意思?
  • 嗨 krishnanunni ,在 trigger.php 中使用了你的方法。但是,trigger.php 不会停止运行(执行)。我的 backgroung.php 只包含一个插入语句来将数据添加到表中。希望这不会花费太多时间来执行。
  • 调用此方法后调用exit()
  • 这不会等待 background.php 完成。这将开始执行 background.php 并离开。 $cmd 是一个参数,用于启动后台进程的命令。这是 4.x 版本的用法。转到de2.php.net/manual/en/function.exec.php#35731 了解更多信息。该页面包含很多信息如何做到这一点
  • 在调用 execInBackground() 函数后包含退出。但同样的问题。我的 trigger.php 执行时间过长。
【解决方案2】:

我改变了如下功能,

$cmd = 'C:\wamp\bin\php\php5.3.5\php.exe C:\wamp\www\email3.php';

function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B " . $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
}

而且,它对我有用。 :)

【讨论】:

  • 如果我想传递参数那么我应该如何传递?我试过使用查询字符串,如 C:\wamp\www\email3.php?id=value 但它不起作用。
猜你喜欢
  • 2011-07-19
  • 2015-06-24
  • 2011-03-31
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2012-11-24
  • 2010-10-19
  • 2011-01-05
相关资源
最近更新 更多