Код возврата пакетного скрипта не работает в переполнении стека

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

0

Решение

Вы видели документацию на http://php.net/function.exec.php? Он говорит вам, что вызов exec порождает случай cmd.exe и это вызывает ваш пакетный скрипт. Возможно, этот промежуточный процесс не пропустит код возврата?

Решением может быть использование proc_open

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector