Просто вложив в контекст, чтобы прояснить главный вопрос:
На моей машине разработки PHP5.3.1 установлен на Apache в качестве модуля, я использую SetEnv APPLICATION_ENVIRONMENT разработки в корневом файле .htaccess моего приложения. Затем он легко извлекается из любого скрипта php с помощью getenv ('APPLICATION_ENVIRONMENT').
На рабочем сервере, на sharedhost (dreamhost), я скомпилировал php5.3.1, поскольку он не поддерживался напрямую. Все работает отлично, за исключением того, что getenv ('APPLICATION_ENVIRONMENT') возвращает false.
В sharedhost root .htaccess для моего домена я использую этот файл .htaccess
Options +ExecCGI AddHandler php-cgi .php Action php-cgi /cgi-bin/php.cgi <FilesMatch "^php5?\.(ini|cgi)$"> Order Deny,Allow Deny from All Allow from env=REDIRECT_STATUS </FilesMatch> Options -indexes
php5.cgi находится в / cgi-bin и работает очень хорошо. Конечно, в корневой папке моего приложения у меня есть другой .htaccess, определяющий:
SetEnv APPLICATION_ENVIRONMENT production
Но при использовании getenv ('APPLICATION_ENVIRONMENT') он возвращает false, любая идея, как разрешить это?
Хорошо, я наконец понял. На dreamhost можно использовать fastcgi и поэтому объявлять с ним переменные среды. Он состоит только из добавления этого простого скрипта
#!/bin/sh export PHP_FCGI_CHILDREN=2 exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi
Здесь находится мой скомпилированный PHP5.3.1. chmod 744 в этом файле с именем dispatch.fcgi, которому будет разрешено больше памяти сторожевым псом dreamhost.
После этого я добавил в htaccess своего домена следующее:
Options +ExecCGI AddHandler fastcgi-script fcg fcgi fpl AddHandler php5-fastcgi .php Action php5-fastcgi /dispatch.fcgi
теперь в корне приложения у меня есть другой .htaccess с:
SetEnv APPLICATION_ENVIRONMENT staging
В php-скрипте можно получить getenv ('REDIRECT_APPLICATION_ENVIRONMENT');
Чтобы директива SetEnv
работала, ваша служба хостинга должна иметь модуль mod_env
…
Но даже если он активирован, возможно, вам не нужно SetEnv
использовать SetEnv
.
Чтобы убедиться, что проблема не в вашем коде, вы можете проверить phpinfo()
: внизу страницы должен быть раздел, содержащий переменные среды, как видно из PHP, – если ваш не находится в там, это не хороший знак для вас …