【发布时间】:2023-04-05 22:18:01
【问题描述】:
我有一个奇怪的情况,我想从 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%
【问题讨论】:
-
也许执行正确的文件?
my_batch.bat与command.bat -
对不起,名字打错了。在我的测试中,所有的都在运行
-
我注意到的行为是,如果
exit /B 12在括号外,那么 PHP 将获取退出代码12,否则它是0。 -
是的,但现有代码在 CMD.exe 中运行良好。为什么不用 PHP 以这种形式工作。
-
正如 Nico Haase 指出的那样,您得到的是
cmd进程的退出代码,而不是批处理文件中的退出代码。您可以简单地删除/B
标签: php batch-file exit-code error-code