Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何调试popen()不工作?_Php_Windows_Background Process_Popen - Fatal编程技术网

Php 如何调试popen()不工作?

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

在我的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 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这就是我最初使用它的方式,但我将其更改为我问题中的方式,以便在尝试调试时检查错误。该代码在任何情况下都是等效的。。