Можно ли использовать переменные среды в php.ini?

Вместо жесткой проводки некоторых путей в моей конфигурации php.ini я хотел бы настроить их с помощью системных переменных, которые будут использоваться в других местах, таких как моя конфигурация Apache. Я сделал некоторые поиски и не смог найти правильное сочетание ключевых слов, чтобы узнать, есть ли способ сделать это.

Кто-нибудь знает, можно ли это сделать?

upload_tmp_dir = $SCRATCH_HOME/uploads

Теперь SCRATCH_HOME можно экспортировать в среду как /tmp или/var/scratch или что бы я ни хотел.

Ответы

Ответ 1

Эта функция плохо документирована. Прежде чем начать, я просто хочу указать свои конфигурации: Я использую Windows 7-64bit, PHP 5.4.3, Apache HTTP Server 2.2.x, я установил свою переменную окружения PHP_HOME=C:\tools\php-5.4.3 (каталог установки PHP). Я использую переменную в файле httpd.conf и php.ini

Примечание. Я буду опускать некоторый текст для краткости.

В файле httpd.conf

# For PHP 5 do something like this:
LoadModule php5_module "${PHP_HOME}/php5apache2_2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "${PHP_HOME}"

В файле php.ini

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "${PHP_HOME}/ext"

Ответ 2

В соответствии с PHP docs переменные среды действительно могут использоваться в файле конфигурации.

Screenshot of php docs with URL and note about envvars being allowed in PHP.ini

Он ничего не говорит о том, какой синтаксис использовать, но он такой же, как и в файле конфигурации Apaches, который использует синтаксис * nix. Например, если вы хотите, чтобы PHP использовал системный temp-каталог, вы должны использовать это:

upload_tmp_dir = ${Temp}

Вы можете подтвердить, что он активен при следующем script:

<?php
    echo "ini:  " . ini_get('upload_tmp_dir') . "\n";
    echo "env:  " . sys_get_temp_dir()        . "\n";
    echo "temp: " . getenv('temp')            . "\n";
    echo "tmp:  " . getenv('tmp')             . "\n";
?>

Ответ 3

Попробуйте настроить PHP через файлы конфигурации Apache:

PHP_admin_value upload_tmp_dir $SCRATCH_HOME/uploads

Прекрасно работает для меня. (psst, вы не можете изменить upload_tmp_dir с помощью .htaccess)