php exec () не работает с НЕКОТОРЫМИ переменными среды windows

Я пытаюсь запустить пару команд из PHP с Exec () и, кажется, работает только для некоторых команд, определенных в моих переменных среды Windows, но не для всех.
В моей командной строке я могу выполнить все эти команды успешно с любого пути (C: \ или E: \ что угодно)

> pear -V     // ... "PEAR Version: 1.9.5" ...
> dot -V      // dot - graphviz version 2.38.0 (20140413.2041)
> phpdoc -V   // phpDocumentor version 2.8.1

Все они возвращают правильную версию для каждой из указанных программ, это означает, что переменные среды хорошо настроены.
Но в PHP я могу запустить только некоторые команды, остальные из них терпят неудачу:

$out = array();
$ret = '';

exec('pear -V', $out, $ret);
echo var_dump($out); // $ret = 0, $out = array ..."PEAR Version: 1.9.5" ...

exec('phpdoc -V', $out, $ret);
echo var_dump($out); // $ret = 1, $out = array ..."Could not open input file: \phpdoc" ...

exec('dot -V', $out, $ret);
echo var_dump($out); // $ret = 1, $out = empty array

Итак, я что-то упустил?

РЕДАКТИРОВАТЬ: exec () работает нормально, он работает для некоторых из моих переменных среды, таких как груша, cmd, среди других, он не работает для указанного выше

PHPDoc
точка (GraphViz)

Хотя они работают в моей командной строке и хорошо настроены в моей среде Windows.

EDIT2:
@ Стефан Цветкович
Я догадываюсь, что это та часть, которую вы хотите увидеть из результата при запуске этой команды

shell_exec ( «установить»):

Path = C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ system32; C: \ Windows, C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files \ TortoiseHg \; C: \ Program Files (x86) \ Universal Extractor; C: \ Program Files (x86) \ Universal Extractor \ bin; C: \ xampp \ php; PATHEXT = .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .wsf; .wsh; .msc

Возможно ли, что php не имеет доступа к моему «точечному» пути, потому что это отсутствует в этом результате:

...C:\xampp\php;C:\xampp\php\pear\phpDocumentor\vendor\graphviz\bin

dot.exe находится в C: \ xampp \ php \ pear \ phpDocumentor \ vendor \ graphviz \ bin и хорошо настроен, так как я могу запустить > dot -V из моей командной строки.
Я также попытался изменить свою позицию в переменной PATH без удачи.

1

Решение

У меня просто была такая же проблема.
В случае, если у кого-то возникла такая же проблема, обязательно перезапустите веб-сервер (apache в моей настройке), поскольку переменная PATH была установлена ​​недавно и, следовательно, была недоступна для процесса (httpd), который был запущен до установки переменной.

1

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

Я бы попробовал использовать gettype на массивах или переменных, которые находятся под вопросом.

За исключением этого, я бы также запустить phpinfo() чтобы увидеть, включен ли этот элемент на вашем сервере (или php.ini, который, я уверен, вы проверили?).

Увидел несколько интересных заметок на exec Exec () и Shell Exec http://php.net/manual/en/function.shell-exec.php, где элементу нужны права администратора для запуска. Возможно, это относится?

0

Попробуйте использовать shell_exec(),

На платформе Linux, например, я не могу использовать exec для извлечения данных lm-sensor, но с shell_exec я могу, и вы получите полный вывод в виде sting.

shell_exec () инструкция

Редактировать:

Попробуй это:

$command = new COM("WScript.Shell");
$shellCommand = $command->Exec("C:\program.exe");

Теперь возьмите выход.

$standard = $shellCommand->StdOut->ReadAll;    # Standard output
$error = $shellCommand->StdErr->ReadAll;       # Error
0

Хотя через два года я оказался в такой же ситуации и нашел решение:

<?php
putenv('PATH=' . $_SERVER['PATH']);
$currentBranch = exec('git rev-parse --abbrev-ref HEAD');

Переменная окружения отсутствует по неизвестной причине в exec вызов,

но он существует в $_SERVER['PATH'], код просто положить его обратно, и он работает

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