PHP system () как экспортировать PATH - PullRequest
1 голос
/ 15 февраля 2011

Я хочу изменить системную переменную $ PATH по умолчанию на период выполнения скрипта php, но по какой-то причине она не работает.

Я пытаюсь сделать следующее:

<?php
$lastline = system('export PATH=$PATH:/customBin;',$return) OR die("why do i die all the time");
echo $lastline;
?>

Но, очевидно, он все время умирает. (пробовал на обоих дистрибутивах Linux RHEL и Debian, php версии 5.3.xx, другие системные команды работают нормально (cat, ls и т. д.), ни одна из этих команд не работает: export PATH=$PATH:/customBin; ИЛИ export PATH=$PATH:/customBin: ИЛИ export PATH=/customBin, все они работают в оболочка, хотя ..)

Любая помощь приветствуется. спасибо.

РЕДАКТИРОВАТЬ: вышеуказанный код является неправильным, решение использовать putenv('PATH=$PATH:/customBin');

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Системные return value (, а не возвращаемый параметр) - это последняя строка вывода команды (ей) или логическое значение FALSE в случае сбоя.В вашем случае это, вероятно, успешно (у вас есть int 0 в переменной $ return для успешного выхода) и ничего не возвращено (возможно, пустая строка), что приводит к значению false в вашем операторе или, и матрица исполняется.Если вы хотите проверить успешность экспорта, попробуйте

system('export PATH=$PATH:/customBin;', $return);
$return === 0 OR die('...');

или если вы хотите использовать системный обработчик ошибок:

(system('export PATH=$PATH:/customBin;') !== FALSE) or die('...');

Если вы не проверяли это, ваши результаты могут отличаться.

2 голосов
/ 15 февраля 2011

Возможно, вам повезет больше, если использовать putenv для изменения переменных среды из PHP. Просто получите текущее значение с помощью getenv , добавьте все, что вам нравится, и, наконец, вызовите putenv, чтобы изменить значение.

1 голос
/ 15 февраля 2011

Ваш подход с system заключается в создании новой среды оболочки, в которой задается значение PATH, а затем остается ее.

Кроме того, ваша проверка на успешность сломана.Вызов возвращает пустую строку, которая затем не проходит вашу условную проверку.

Насколько я знаю, вы не можете манипулировать средой, которая вызвала php .

...