Код возврата пакетного скрипта не работает в php - PullRequest
0 голосов
/ 07 сентября 2018

У меня странная ситуация с очень простым пакетным файлом, который я хочу запустить из PHP, и получить код выхода этого.

Если я запускаю пакетный скрипт из cmd.exe, echo %errorleve% вернет правильный код завершения, в данном случае 12. Из PHP-скрипта код выхода: 0.

my_batch.bat file

@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 file

@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%

1 Ответ

0 голосов
/ 07 сентября 2018

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

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

...