Объявление глобальной переменной с помощью php.ini

Можно ли сохранить переменные в файле php.ini. Подобным образом мы работаем с web.config в .net. Мне нравится сохранять переменную типа флага в php.ini и использовать ее для разных проектов.

Ответы

Ответ 1

Невозможно установить переменные уровня пользователя в файл простой php.ini(или equitsents.htaccess). Есть некоторые модули PECL, которые позволяют это, например hidef (http://pecl.php.net/package/hidef) - хотя они должны быть установлены на каждой используемой вами установке.

Включение (или pre-including) файла с auto_prepend_file вполне возможно - хотя это было бы на каждом запросе PHP.

Часто выполняется настройка переменной среды как части процесса веб-сервера, которую можно прочитать с PHP. В Apache это довольно просто, с модулем SetEnv.

SetEnv PRODUCTION_SERVER 1

И доступ к нему в PHP:

if ($_ENV['PRODUCTION_SERVER']) {...}  // or getenv('PRODUCTION_SERVER')

Ответ 2

Неа.

Вы можете использовать директиву auto_prepend_file для автоматического включения файла, который сказал, хотя, поскольку он использует include_path, вам нужно будет указать полный путь.

Однако, возможно, он более прозрачен, чтобы явно включать/требовать соответствующий файл.

Ответ 3

Вы посмотрели get_cfg_var()?

Мне нужно было сделать что-то подобное, и это удалось сделать для меня.

Ответ 4

Один метод, который я нашел полезным для передачи ограниченного числа глобальных переменных в bootstrap script, - это воспользоваться директивой SetEnv в файле .htaccess. Преимущество состоит в том, что указанная вами переменная будет доступна для любого script в этом каталоге, плюс любые скрипты в дочерних каталогах под ним.

Вы можете использовать переменную SetEnv с расположением файла конфигурации, например:

в .htaccess:

SetEnv init_path /home/hendepher/TestApp/init/init.php

В вашем .php scipt:

<?php
    if(!getenv('init_path')) throw new Exception('Must set init_path in .htaccess');
    require_once getenv('init_path');
    .
    .
    .

?>

Если у вас есть тестовый каталог, требующий различной инициализации глобальных переменных, просто добавьте еще один файл .htaccess в тестовый каталог:

SetEnv init_path /home/hendepher/TestApp/init/testing_init.php

Выполнение этого способа, в отличие от использования директивы auto_prepend_file, заключается в том, что ваша глобальная конфигурация script не запускается всеми приложениями php на вашем сервере: некоторые могут не нуждаться в ней.

Ответ 5

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

Ответ 6

Вы считали hidef?

Разрешить определение пользовательских констант в простых ini файлах, которые затем обрабатываются как внутренние константы, без каких-либо от обычных штрафных санкций.

Ответ 7

Принятые ответы также работали для меня с одним изменением.

Я не тестировал это в более ранних версиях, но в моей среде (php 5.4.22) это не отображается в $_ENV, а скорее в $_SERVER.

В моем файле .htacess:

SetEnv PRODUCTION_SERVER 0.  

Мой php-код:

$production="PRODUCTION";
if (!isset($_SERVER['PRODUCTION_SERVER']) || $_SERVER['PRODUCTION_SERVER'] != 1){
    $production="DEVELOPMENT";
}