如何调试popen()不工作


How to debug popen() not working?

在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进行调试,但在这种情况下没有办法使用它。

我从来没能让我的代码正常工作,但我在这里找到了另一个答案的替代方法,并在此基础上更改了我的代码,使其使用以下方法,它有效:

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