如何调试popen()无法正常工作?

时间:2015-02-25 18:13:21

标签: php windows background-process popen

在我的Linux服务器上,我使用shell_exec()异步运行脚本。我在Windows上使用此功能进行开发,因此我尝试使用popen()代替。

我正在运行Windows 10 x64,WampServer 2.5 x32(PHP 5.5.12)。

我在PHP文件中有以下代码:

$cmd = '"C:\wamp\bin\php\php5.5.12\php.exe" "C:\wamp\www\path\to\file.php" "arg1" "arg2"';

        echo 'Running on DEV MACHINE: ' . $cmd . PHP_EOL;
        $handle = popen("start /B " . $cmd, "r");
        if ($handle === FALSE) {
            die("Unable to execute $cmd");
        }
        pclose($handle);

脚本执行时没有任何错误,但PHP文件永远不会运行。我知道它们没有被运行,因为我在最顶层放置一个SQL查询来更新数据库中的字段以表明它们已经运行。

正如您在上面的代码中看到的,我打印出传递给popen()的命令。如果我将该命令粘贴到命令提示符并执行它,脚本运行正常。这证明问题在于popen()

我是否以某种方式错误地使用popen()?我该如何调试问题是什么?通常我会使用XDebug进行调试,但在这种情况下无法使用它。

1 个答案:

答案 0 :(得分:0)

我从来没有能够让我的代码正常工作,但我在这里找到了另一种方法的替代方法,并且基于这改变了我的代码以使用以下内容并且它有效:

$WshShell = new \COM("WScript.Shell");
$oExec = $WshShell->Run($cmd, 0, false);