【问题标题】:Windows/php pclose and popen issueWindows/php pclose 和 popen 问题
【发布时间】:2011-10-25 22:27:02
【问题描述】:

这是我的代码:

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

    if(isset($_GET['date'])){
        //CHECK LOCK
        $checkLock = "Select IS_FREE_LOCK('overnight') as `lock`;";
        $result = mysql_query($checkLock) or die(mysql_error());
        while($information = mysql_fetch_array($result)){
            if($information['lock'] == 0){
                die('Overnight is already running, please try again later.');
            }
        }
        execInBackground("php overnightQueries.php {$_GET['date']}");
        //echo "<pre>".print_r($output2, true)."</pre>";
        header('Refresh: 3; url=index.php');
        die('running queries...');
    }
    else {

        die('PLEASE SET DATE');

    }
?>

我正在使用 Windows 机器。

我收到以下警告:

警告:popen(start /B php nightQueries.php 2011_08_12,r): 第 5 行 C:\inetpub\GTSA\runOvernight.php 中没有错误

与:

警告:pclose() 期望参数 1 是资源,布尔值在 C:\inetpub\GTSA\runOvernight.php 第 5 行给出

【问题讨论】:

  • 老实说我不记得@Muhwu :-( 那是 > 4 年前。
  • 哦,哇,没有注意到年份。不能说我怪你。虽然很遗憾。我认为它与处理输出的方式有关,因为做 popen("start /B ". $cmd ." > C:\\file.txt", "r");有效,但去掉 > C:\... 部分,它没有。

标签: php windows iis popen pclose


【解决方案1】:
$handle = popen("start /B ". $cmd, "r");  
if ($handle === FALSE) {
   die("Unable to execute $cmd");
}
pclose($handle);

如果出现问题,popen 会返回 false,而您会盲目地将其传递给 pclose,因此会出现第二个错误。

至于第一个错误,请检查 PHP 是否在您的环境路径中 - 您可能需要指定 php.exe 的绝对路径。

【讨论】:

  • hmmm php 在 PATH 中。我要试试你的答案,一分钟。
  • 好的,现在我明白了:Unable to execute php overnightQueries.php 2011_08_12 可能是什么问题?
  • 尝试添加一个绝对路径到 php,例如c:\bin\php.exe。请注意,如果您的路径有空格,则需要引用命令,并且 start 有一些奇怪的引号:stackoverflow.com/questions/154075/…
  • 现在我得到Unable to execute c:\php\php.exe overnightQueries.php 2011_08_12(基本上是一样的)
  • 也忘了提到这个相同的脚本在不同的 windows vm 上工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2014-02-12
相关资源
最近更新 更多