批处理脚本的返回代码在php中不起作用
我有一个非常简单的批处理文件,我想从PHP运行,并得到这个文件的退出代码 如果我从批处理脚本的返回代码在php中不起作用,php,batch-file,exit-code,error-code,Php,Batch File,Exit Code,Error Code,我有一个非常简单的批处理文件,我想从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 ) @ECHO OFF if "1"=="1" ( if "
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
)
@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_test.php
<?php
exec('my_batch.bat',$result,$exitcode);
echo $result[0];
echo '<br />';
echo $exitcode;
输出oh php:
quitting
0
谢谢你的支持
编辑1
很奇怪,如果我用这个版本修改代码,一切正常
my_batch.bat文件
@ECHO OFF
if "1"=="1" (
if "1"=="1" (
echo quitting
exit /B 12
)
echo anything
)
@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%
你看过网站上的文档了吗?它告诉您调用
exec
会生成cmd.exe
的实例,这将调用批处理脚本。这个中间进程可能不会传递返回代码
解决方案可以是使用
proc\u open
执行正确的文件my_batch.bat
vscommand.bat
对不起,输入的名称错误。在我的测试中,所有人都在运行我注意到的行为是,如果exit/b12
在括号外,那么PHP将获得exitcode12
,否则为0
。正确,但exist代码在CMD.exe中运行得非常好。为什么不在这个表单中使用PHP呢?正如Nico Haase所指出的,您得到的是cmd
进程的退出代码,而不是批处理文件中的退出代码。您可以简单地删除/B
与proc\u open