如何调试 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);
在我的 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);