Как использовать 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, если ваш не в это плохой знак для тебя...