Объявление глобальной переменной с php.ini - PullRequest
14 голосов
/ 19 февраля 2011

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

Ответы [ 7 ]

20 голосов
/ 19 февраля 2011

Невозможно установить переменные уровня пользователя в простом файле php.ini (или эквивалентах .htaccess). Есть некоторые модули 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')
5 голосов
/ 11 июня 2013

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

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

4 голосов
/ 19 февраля 2011

Нет.

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

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

1 голос
/ 18 августа 2015

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

Я не проверял это на более ранних версиях, но в моей среде (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";
}
1 голос
/ 19 февраля 2011

Один метод, который я нашел полезным для передачи ограниченного числа глобальных переменных в скрипт начальной загрузки, - это использование директивы 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 на вашем сервере: некоторым это может не понадобиться.

0 голосов
/ 19 февраля 2011

Рассматривали ли вы hidef ?

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

0 голосов
/ 19 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...