Php 如何调试popen()不工作?
在我的Linux服务器上,我使用Php 如何调试popen()不工作?,php,windows,background-process,popen,Php,Windows,Background Process,Popen,在我的Linux服务器上,我使用shell\u exec()异步运行脚本。此函数在我用于开发的Windows上不可用,因此我尝试使用popen() 我运行的是Windows10x64,WAMPServer2.5x32(PHP5.5.12) 我在PHP文件中有以下代码: $cmd = '"C:\wamp\bin\php\php5.5.12\php.exe" "C:\wamp\www\path\to\file.php" "arg1" "arg2"'; echo 'Running o
shell\u exec()
异步运行脚本。此函数在我用于开发的Windows上不可用,因此我尝试使用popen()
我运行的是Windows10x64,WAMPServer2.5x32(PHP5.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);
您是否尝试过:
pclose(popen(“start/B”。$cmd,“r”)代码>?@Anthony如果你看一下代码,这正是我的问题所在。由于某种原因,它无法工作。不,您先有popen(),然后是错误检查,然后是pclose()。我建议使用pclose(popen()),其中popen位于pclose中。如果你看一下代码,你会看到不同之处。@Anthony这就是我最初使用它的方式,但我将其更改为我问题中的方式,以便在尝试调试时检查错误。该代码在任何情况下都是等效的。。