Как использовать getenv () в php и SetEnv в a.htaccess с скомпилированным php-cgi на общем хосте
просто поставив в контекст, чтобы прояснить главный вопрос:
на моей машине развития, PHP5.3.1 установлен на Apache в качестве модуля, я использую SetEnv APPLICATION_ENVIRONMENT development в корне моего приложения .файл 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
рнр5.cgi находится в /cgi-bin и работает очень хорошо. Конечно, в корневой папке моего приложения у меня есть другой .htaccess для определения:
SetEnv APPLICATION_ENVIRONMENT production
но при использовании getenv ('APPLICATION_ENVIRONMENT') он возвращает false, есть идеи, как это решить?
2 ответов
хорошо, наконец-то я понял. На 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, если ваш не в это плохой знак для тебя...