我有一个非常简单的批处理文件的奇怪情况,我想从PHP运行,并获得此退出代码。
如果我从cmd.exe
运行批处理脚本,echo %errorleve%
将返回正确的退出代码,在本例中为12
。从PHP脚本,退出代码是0
。
my_batch.bat文件
@ECHO OFF
if "1"=="1" (
if "1"=="1" (
echo quitting
exit /B 12
)
echo anything
)
my_test.php
<?php
exec('my_batch.bat',$result,$exitcode);
echo $result[0];
echo '<br />';
echo $exitcode;
cmd.exe的输出
D:\tools\xampp\htdocs\test>my_batch.bat
quitting
D:\tools\xampp\htdocs\test>echo %errorlevel%
12
D:\tools\xampp\htdocs\test>
php的输出:
quitting
0
感谢您的支持
编辑1
很奇怪,如果我用这个版本更改代码,一切正常
my_batch.bat文件
@ECHO OFF
if "1"=="1" (
if "1"=="1" (
echo quitting
SET MYERROR=12
GOTO:END
)
echo anything
)
:END
echo finished ... ERRORLEVEL "%MYERROR%"
exit /b %MYERROR%
你在http://php.net/function.exec.php看过文件吗?它告诉你,exec
的调用会产生一个cmd.exe
的实例,这会调用你的批处理脚本。可能这个中间过程不会通过返回代码?
解决方案可能是使用proc_open