Как правильно установить PATH в PHP
Я пытаюсь установить PATH
Переменная окружения в PHP, и я столкнулся с неожиданным поведением:
var_dump(getenv('PATH'));
system('echo $PATH');
system('which true 2>&1');
system('PATH="$PATH" which true 2>&1');
результаты в
string(23) "/usr/local/bin:/usr/bin"
/usr/local/bin:/usr/bin
which: no true in ((null))
/usr/bin/true
Это также отражается на выбранных исполняемых файлах, которые /usr/bin
скорее, чем /usr/local/bin
,
Моя цель (очевидно) изменить путь к некоторому исполняемому файлу, вызываемому во время сценария. Но я также не могу напрямую изменить путь к исполняемому файлу, путь которого я хочу изменить, потому что он вызывается косвенно некоторым двоичным файлом. Я не могу просто использовать PATH="$PATH"
вариант без исправления внешней библиотеки.
Поскольку очевидные обходные пути неприменимы, и поскольку я нахожу это очень любопытным, я хотел бы объяснить, почему это происходит и как (или если) можно установить PATH таким образом, который передается в system
или же exec
звонки.
Сценарий запускается через php-fpm, на случай, если это будет интересно.