Я использую экземпляр Linux EC2 для веб-служб Amazon, где я устанавливаю идентификатор экземпляра в качестве переменной среды, выполняя
export EC2_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
Когда я пытаюсь извлечь данные из переменной в php, используя $_ENV['EC2_INSTANCE_ID']
или getenv("EC2_INSTANCE_ID")
я получаю сообщение об ошибке:
Неопределенный индекс: EC2_INSTANCE_ID
(Эта ошибка возникает из $ _ENV ['…'], getenv () просто не возвращает значение переменной.)
Я уже установил переменные среды в php.ini, установив variables_order = "EGPCS"
.
Когда я запускаю printenv
в командной строке, я получаю EC2_INSTANCE_ID=i-039.....
Я перезапустил apache, используя service httpd restart
после установки переменной среды.
Итак, почему php не извлекает переменную?
Если вы выполняете экспорт VARNAME = значение в оболочке, как вы предлагаете в своем вопросе, тогда PHP-программа, работающая на веб-сервере, не сможет ее прочитать. Например, если вы используете Apache, то вам нужно будет установить эту переменную в конфигурации Apache для этого конкретного виртуального хоста .. что-то вроде:
<VirtualHost ser.ver:80> SetEnv VARNAME value </VirtualHost>
Затем PHP-программа на этом сервере сможет прочитать эту переменную с getenv () или $ _ENV, как вы ожидаете.
То, что вы описали, будет работать только в том случае, если ваша программа PHP выполняется как клиентская программа на вашем компьютере:
$ export VARNAME=value $ cat "<?php echo getenv('VARNAME'); ?>" > test.php $ php test.php