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

15
задан Steven Rosato 5 January 2010 в 18:18
поделиться

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');

.
14
ответ дан 1 December 2019 в 03:04
поделиться

Чтобы директива SetEnv работала, ваша служба хостинга должна иметь mod_env модуль активирован ...

Но, даже если он активирован, возможно, вам не нужно разрешение на использование SetEnv .

Чтобы убедиться, что проблема не в вашем коде, вы можете проверить вывод phpinfo () : внизу страницы должен быть раздел, содержащий переменные среды, как показано из PHP - если вашего там нет, это плохой знак для вас ...

10
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: