Недавно я изменил среду веб-сервера в своей производственной системе на Apache2.4 / mod_fcgid 2.3.9. При перезапуске Apache я понял, что мои скрипты зависят от PHP getenv()
были сломаны. Проверяя дальше, я мог бы получить Windows PATH с getenv("PATH")
но не несколько других переменных, установленных моей установкой приложения, или даже некоторые другие (например, PSModulePath
).
С помощью phpinfo()
Я не могу видеть эти переменные Windows env, как они были, когда я запускал PHP как модуль apache (mod_php
).
Я выложил другие детали моего httpd.conf
на Serverfault (https://serverfault.com/questions/675736/apache-2-4-with-mod-fcgid-getenv-not-working-in-php), где подробная версия этого вопроса еще не получила ответа.
В принципе, есть ли фундаментальная причина, почему php getenv()
при работе на mod_fcgid
Должны ли извлекаться только определенные переменные (может быть, те, которые изначально установлены с операционной системой, я предполагаю), но игнорировать те, которые впоследствии устанавливаются другими приложениями?
Я кормил Google почти 48 часов и не нашел ничего осязаемого. Может ли кто-нибудь быть добрым, чтобы помочь с пониманием.
Спасибо.
Подведем итоги. У меня не было проблем (под WAMP), пока я не решил перейти на mod_fcgid
по умолчанию запуск PHP в качестве модуля apache. После этого, getenv()
называется в моем PHP-код вернулся NULL
для большинства переменных среды Windows (хотя они отлично работают, как только я переключился на исходный mod_php
).
Вот что решило эту проблему для меня после нескольких дней спотыкания. добавлять PassEnv
для каждой из пропущенных переменных, которые вы хотите передать в PHP:
PassEnv Variable1
PassEnv Variable2
PassEnv Variable3
Затем, конечно, перезапустите сервер Apache.
Все еще странно, что такого рода произвольные различия должны существовать и быть настолько плохо отражены в документации Apache или fcgid!
Других решений пока нет …