Подтвердить что ты не робот

Как использовать 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, любая идея, как разрешить это?

4b9b3361

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