返回代码批处理脚本在php中不起作用

问题描述 投票:0回答:1

我有一个非常简单的批处理文件的奇怪情况,我想从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%
php batch-file exit-code error-code
1个回答
0
投票

你在http://php.net/function.exec.php看过文件吗?它告诉你,exec的调用会产生一个cmd.exe的实例,这会调用你的批处理脚本。可能这个中间过程不会通过返回代码?

解决方案可能是使用proc_open

© www.soinside.com 2019 - 2024. All rights reserved.