2015-03-16 4 views
2

Недавно я изменил среду веб-сервера на своей производственной системе на Apache2.4/mod_fcgid 2.3.9. При перезапуске Apache я понял, что мои скрипты в зависимости от PHP getenv() были сломаны. Кроме того, я мог получить Windows PATH с getenv("PATH"), но не несколькими другими переменными, установленными установкой моего приложения, или даже некоторыми другими (например, PSModulePath).PHP getenv() возвращает только несколько параметров в Windows

Использование phpinfo(), я не вижу эти переменные env Windows, как они были, когда я запускал 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 часов и не нашел ничего ощутимого. Может ли кто-нибудь быть любезным, чтобы помочь с пониманием.

спасибо.

+0

Я считаю, что подавляющее большинство PHP-инсталляций имеют какой-то колорит Unix/Linux, поэтому вы можете попытаться получить ответ на этот вопрос. Сожалею. Есть ли причина, по которой вам нужно напрямую запускать PHP в среде Windows? Не могли бы вы запустить его внутри виртуальной машины? – GordonM

+0

@ GordonM. Спасибо, что ушли. Я понимаю, что PHP и Unix генетически гораздо ближе. Дело в том, что я никогда не делал серьезной работы в Unix, и снова эта конкретная проблема никогда не появлялась, пока этот конкретный модуль не изменился. AGAIN: Если я запускаю PHP в Windows VM внутри Unix, разве это еще не «Windows»? –

ответ

0

Чтобы повторить проблему. У меня не было проблем (под WAMP), пока я не решил изменить на mod_fcgid по умолчанию запуска PHP в качестве модуля apache. После этого , вызванный в моем PHP-коде, возвратил NULL для большинства переменных среды Windows (даже если они работают отлично, как только я вернусь к исходному mod_php).

Вот что решило эту проблему для меня, после нескольких дней спотыкания. Добавить PassEnv для каждого из недостающих переменных, которые вы хотите передать в PHP:

PassEnv Variable1 
PassEnv Variable2 
PassEnv Variable3 

Тогда, конечно, перезапустить сервер Apache.

По-прежнему странно, что такого рода произвольные различия должны существовать и быть настолько плохо захвачены в документах Apache или Fcgid!