Как использовать getenv() в php и SetEnv в .htaccess с скомпилированным php-cgi на общем хосте
Просто введите контекст, чтобы прояснить главный вопрос:
На моей машине разработки PHP5.3.1 установлен на Apache в качестве модуля, я использую SetEnv APPLICATION_ENVIRONMENT в моем корневом файле .htaccess приложения. Затем он легко извлекается из любого php script с 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, любая идея, как разрешить это?
Ответы
Ответ 1
Хорошо, наконец, понял. На dreamhost можно использовать fastcgi и поэтому объявлять с ним переменные среды. Он состоит только из добавления этого простого script
#!/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 script можно восстановить через getenv ('REDIRECT_APPLICATION_ENVIRONMENT');
Ответ 2
Для директивы SetEnv
ваша служба хостинга должна иметь активированный модуль mod_env
...
Но даже если он активирован, возможно, вам не нужно разрешать использовать SetEnv
.
Чтобы убедиться, что проблема не в вашем коде, вы можете проверить вывод phpinfo()
: внизу на странице должна быть секция, содержащая переменные среды, как видно из PHP, - если ваш не там, это не хороший знак для вас...