Назад | Перейти на главную страницу

Как предотвратить добавление Apache REDIRECT_ к переменным среды при запуске php как CGI?

Я использовал GridService от MediaTemple в качестве производственной среды для пары относительно легких PHP-сайтов. Процесс настройки тестовых и промежуточных сред является довольно громоздким и приводит к тому, что сотрудники используют ярлыки, поэтому я пытаюсь создать среду контроля качества, которая предоставляет среду, аналогичную GridService, но которая позволяет мне более тесно привязать ее к нашей автоматизированный процесс развертывания (для подготовки новых сред в GridService вам необходимо использовать веб-интерфейс; mod_vhost_alias просто позволит нам создавать каталоги, которые являются поддоменами нашего тестового URL).

Я очень, очень близок, но столкнулся с проблемой - когда PHP работает как CGI, apache автоматически добавляет REDIRECT_ к любым переменным, которые я установил в .htaccess (помните, я имитирую GridService) с помощью SetEnv. Например:

.htaccess

SetEnv HTTP_TEST_VAR "Some Value"

PHP

echo getenv('HTTP_TEST_VAR'); // prints ""
echo getenv('REDIRECT_HTTP_TEST_VAR'); // prints "Some Value"

Это не было бы большой проблемой (мы могли бы обойти это код), за исключением того, что этого не происходит в GridService, и я действительно предпочел бы иметь идентичные пути кода (добавление логики переключения в код нарушило бы смысл всех работа, которую мы проделали, чтобы получить конфигурацию из кодовой базы).

Для остальной части фона я использую совершенно новый (2 недели назад) (ve) экземпляр под управлением Ubuntu, получил apache и все зависимости от apt и построил PHP (5.3.15), используя строку конфигурации из <?php phpinfo() ?> на GridService, без поддержки db4.

Буду очень признателен за любую помощь. Спасибо!

Не знаю, будет ли это хорошим решением, но PHP, работающий в режиме FastCGI (mod_fastcgi), работает нормально с переменными SetEnv без добавления REDIRECT_.

Была такая же проблема с PHP, работающим в режиме CGI, решена переключением на FastCGI.

Я не думаю, что вы можете изменить это поведение с помощью php-cgi, поскольку, по сути, это перенаправление. Обратите внимание, что возвращаемое значение функции php getenv ()

Возвращает значение переменной окружения varname или FALSE, если переменная окружения varname не существует.

так что вы можете легко создать функцию, которая возвращает значение, независимо от того, REDIRECT_ или нет.