У меня странная ситуация с очень простым пакетным файлом, который я хочу запустить из 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
Других решений пока нет …