Объявление глобальной переменной с помощью 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";
}