2010-04-05 27 views
0

PHP 5.2.13优美的DOS命令的错误处理在Windows 2003

我使用的是DOS启动/ B命令,使用PHP POPEN推出了后台应用程序()函数:

popen("start /B {$_SERVER['HOMEPATH']}/{$app}.exe > {$_SERVER['HOMEPATH']}/bg_output.log 2>&1 & echo $!", 'r'); 

的popen()函数启动运行指定命令的cmd.exe进程;但是,如果命令失败(例如{$ app} .exe不存在或在上面的示例中被锁定),则cmd.exe进程将不会返回,并且PHP因此无限期地挂起。

使用命令提示符直接调用失败的DOS命令会产生错误提示,需要单击确定按钮。

我认为这个错误确认要求是阻止cmd.exe进程从命令提示符(同时使用CGI和CLI)和Web(使用Apache 2.0处理程序w/Apache 2.2)返回到PHP。

是否有办法编写DOS命令或配置服务器或cmd.exe应用程序本身,以将DOS错误返回给始发呼叫而不是等待确认?

+0

多一点上下文可能会有帮助 - “popen”之前和之后会发生什么?发表更多代码 – thetaiko 2010-04-05 20:36:21

+0

感谢您的咨询;然而,问题不在于使用DOS而是使用popen。我希望得到一个DOS命令标志/选项的建议,它会强制错误返回或Server/Cmd.exe配置选项无需确认DOS错误。 – 2010-04-05 21:17:14

回答

0

从手册:http://php.net/manual/en/function.popen.php

如果要执行可能 无法找到该命令,有效的资源是 返回。这可能看起来很奇怪,但是使得 有意义;它可以让你访问shell返回的任何 错误消息:

error_reporting(E_ALL); 

/* Add redirection so we can get stderr. */ 
$handle = popen('/path/to/executable 2>&1', 'r'); 
echo "'$handle'; " . gettype($handle) . "\n"; 
$read = fread($handle, 2096); 
echo $read; 
pclose($handle); 
+0

感谢您的建议,但这不会强制DOS返回到PHP - 它只会在DOS返回时捕获信息。 – 2010-04-05 21:12:32

0

您是否尝试过cmd.exe /c ...代替start /b