Можно ли сохранить переменные в файле php.ini. Подобным образом мы работаем с web.config в .net. Мне нравится сохранять переменную типа флага в php.ini и использовать ее для разных проектов.
Невозможно установить переменные уровня пользователя в простой файл php.ini (или эквивалентные .htaccess equivilents). Есть некоторые модули PECL, которые позволяют это, например hidef ( http://pecl.php.net/package/hidef ), хотя они должны быть установлены при каждой используемой вами установке.
Включение (или предварительный) файла с файлом auto_prepend_file вполне возможно – хотя это было бы на каждом запросе PHP.
Часто делается настройка переменной среды как части процесса веб-сервера, которую можно прочитать с PHP. В Apache это довольно просто, с модулем SetEnv .
SetEnv PRODUCTION_SERVER 1
И доступ к нему в PHP:
if ($_ENV['PRODUCTION_SERVER']) {...} // or getenv('PRODUCTION_SERVER')
Неа.
Вы можете использовать директиву auto_prepend_file, чтобы автоматически включать файл, который сказал, хотя, поскольку он использует include_path, вам нужно указать полный путь.
Однако, вероятно, более прозрачно просто явно включать / требовать соответствующий файл.
Вы посмотрели на get_cfg_var()
?
Мне нужно было сделать что-то подобное, и это удалось сделать для меня.
Один из методов, который я нашел полезным для передачи ограниченного числа глобальных переменных сценарию начальной загрузки, заключается в использовании директивы SetEnv в файле .htaccess. Преимущество состоит в том, что указанная вами переменная будет доступна для любого скрипта в этом каталоге, плюс любые скрипты в дочерних каталогах под ним.
Вы можете использовать переменную 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, заключается в том, что ваш глобальный сценарий конфигурации не запускается всеми приложениями php на вашем сервере: кому-то это может не понадобиться.
Я не думаю, что это хорошее место для хранения переменных. php.ini предназначен для хранения конфигурации самого PHP, а не ваших приложений. Вы должны рассмотреть возможность включения общих переменных в файл .inc и включение этого.
Вы считали hidef ?
Разрешить определение пользовательских констант в простых ini-файлах, которые затем обрабатываются как внутренние константы без каких-либо обычных штрафов за производительность.
Принятые ответы также работали на меня, с одним изменением.
Я не тестировал это на более ранних версиях, но в моей среде (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"; }