Просто включив контекст для разъяснения основного вопроса:
На моей машине разработки PHP5.3.1 установлен на Apache как модуль, я использую разработку SetEnv APPLICATION_ENVIRONMENT в корне своего приложения .htaccess файл. Это тогда легко восстановимо из любого сценария PHP с getenv ('APPLICATION_ENVIRONMENT').
На рабочем сервере, на sharedhost (dreamhost), я скомпилировал меня php5.3.1, так как он непосредственно не поддерживался. Все хорошо работает за исключением того, что getenv ('APPLICATION_ENVIRONMENT') возвращает false.
В корне sharedhost .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
.
Чтобы убедиться, что проблема не в вашем коде, вы можете проверить вывод phpinfo ()
: внизу страницы должен быть раздел, содержащий переменные среды, как показано из PHP - если вашего там нет, это плохой знак для вас ...