Установите и проверьте переменную среды - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь установить переменную окружения в зависимости от того, работает ли PHP как модуль apache из файла .htaccess. Извлекая массив $_SERVER в php-скрипт, я вижу, что переменная MOD_PHP успешно установлена, но условие reqenv() всегда, кажется, возвращает false, поскольку ini_get('memory_limit'); по-прежнему сообщает значение по умолчанию.

<IfModule mod_php5.c>
    SetEnv MOD_PHP php5
</IfModule>
<IfModule mod_php7.c>
    SetEnv MOD_PHP php7
</IfModule>
<IfVersion >= 2.4>
    <If "reqenv('MOD_PHP') != '' || reqenv('REDIRECT_MOD_PHP') != ''">
        php_value memory_limit 1024M
    </If>
</IfVersion>

Не уверен, почему выше не работает. Если я переместу php_value прямо под секцией <IfVersion>, значение будет изменено, как и ожидалось:

<IfModule mod_php5.c>
    SetEnv MOD_PHP php5
</IfModule>
<IfModule mod_php7.c>
    SetEnv MOD_PHP php7
</IfModule>
<IfVersion >= 2.4>
# the following works
php_value memory_limit 1024M
</IfVersion>

Так что, похоже, что-то связано с <If "reqenv()"> частью.

Я использую php 7.2.13 в Ubuntu 14.04 с установленным apache 2.4.7.

Могу также добавить, что я использую PHP как модуль apache.

1 Ответ

0 голосов
/ 09 марта 2019

SetEnv происходит очень поздно, до <if> оценки.

SetEnvIf происходит намного раньше, до <if> оценки.

Используйте SetEnvIf, если вы хотите установить переменную среды для каждого запроса достаточно рано, чтобы проверить ее с помощью <if>. Или используйте переменную реального окружения (определенную, например, в файле envvars, распространяемую с httpd), если переменная вообще не относится к запросу.

...