Как использовать getenv () в php и SetEnv в .htaccess с скомпилированным php-cgi на общем хосте

Просто вложив в контекст, чтобы прояснить главный вопрос:

На моей машине разработки 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, – если ваш не находится в там, это не хороший знак для вас …