Я обычно источник * .sh-файла в терминале bash на linux, как это
. ./myscript.sh
перед запуском скрипта PHP командной строки, поэтому я могу получить доступ к экспортированным переменным окружения, используя PHP $ _SERVER super global.
Возможно ли исходный файл sh из самого скрипта PHP, чтобы затем получить доступ к экспортируемым им переменным?
Я пробовал все виды без успеха. я пробовал
system('. ./myscript.sh') system('sh ./myscript.sh') exec('. ./myscript.sh') exec('sh ./myscript.sh') shell_exec('. ./myscript.sh') shell_exec('sh ./myscript.sh')
используя эти, экспортированные vars не появляются в $ _SERVER.
Есть идеи?
Ваши переменные недоступны, потому что оболочка, в которой они существовали, вышла. Вам нужно выполнить PHP из одной оболочки, чтобы получить свои вары.
Или отредактируйте myscript.sh, чтобы запустить PHP-скрипт после установки vars:
export VAR1=1 export VAR2=2 php -f /path/to/script.php
Или напишите еще один скрипт-оболочку, который отправляет ваш файл, а затем запускает PHP из той же оболочки:
. ./myscript.sh php -f /path/to/script.php
Изменить: или просто запустите свой скрипт следующим образом:
. ./myscript.sh && php -f /path/to/script.php
Поиск файла в оболочке, например bash
, требует, чтобы оболочка была запущена, и она просто читает в этом файле и интерпретирует ее. Когда вы запускаете php
из командной строки оболочки, он разворачивает отдельный процесс, который наследует среду. Когда этот процесс заканчивается, он отбрасывает объем памяти исполняемого файла, включая среду.
Что касается того, чтобы PHP
выполнял скрипт, он будет делать то же самое – создайте процесс разделения для bash
(например) и получите этот процесс для чтения в скрипте, интерпретируйте его, следуйте его командам букве, а затем, когда дело доходит до конца процесс завершится вместе с последующими экологическими изменениями, которые он совершил.
Поэтому возможным решением для этого является сделать следующее.
popen
для popen
в bash
команды source
, export
, exec php
Кажется, много хлопот. Просто напишите сценарий для настройки среды, а затем запустите PHP.
Прежде всего, если вы создаете скрипт php командной строки, я не знаю, сколько переменных env вы получите в массиве $ _SERVER.
Возможно, вы захотите использовать функцию getenv()
: http://www.php.net/manual/en/function.getenv.php
Кроме того, чтобы исправить свой файл, вы пробовали делать ?:
exec('source ./myscript.sh')
Дайте мне знать, если это поможет!