Intereting Posts

Предоставляет ли PHP файл * .properties, как в Java?

Есть ли способ использовать файл * .properties в PHP, как в Java? Я хотел бы сохранить некоторые константы уровня приложения в свойствах или XML-файле и легко вызвать их из всего кода. Ваше руководство очень ценится. Благодарю.

PHP может изначально загружать и анализировать файлы .ini с помощью parse_ini_file() .

Вы также можете настроить константы в файле include, используя define() .

Если вы настроены на XML, изучите XML-функциональность PHP. Простейшим решением, вероятно, является использование SimpleXML .

Вы также можете использовать файл PHP, содержащий массив для хранения данных. Пример:

config.php

 <?php return array( 'dbhost' => 'localhost', 'title' => 'My app' ); 

Затем в другом файле:

 $config = require 'config.php': echo $config['title']; 

parse_ini_file не имеет ничего общего с *.properties файлами в средах Java.

Я создаю эту функцию, которая делает то же самое, что и ее эквивалент в Java:

 function parse_properties($txtProperties) { $result = array(); $lines = split("\n", $txtProperties); $key = ""; $isWaitingOtherLine = false; foreach($lines as $i=>$line) { if(empty($line) || (!$isWaitingOtherLine && strpos($line,"#") === 0)) continue; if(!$isWaitingOtherLine) { $key = substr($line,0,strpos($line,'=')); $value = substr($line,strpos($line,'=') + 1, strlen($line)); } else { $value .= $line; } /* Check if ends with single '\' */ if(strrpos($value,"\\") === strlen($value)-strlen("\\")) { $value = substr($value, 0, strlen($value)-1)."\n"; $isWaitingOtherLine = true; } else { $isWaitingOtherLine = false; } $result[$key] = $value; unset($lines[$i]); } return $result; } не function parse_properties($txtProperties) { $result = array(); $lines = split("\n", $txtProperties); $key = ""; $isWaitingOtherLine = false; foreach($lines as $i=>$line) { if(empty($line) || (!$isWaitingOtherLine && strpos($line,"#") === 0)) continue; if(!$isWaitingOtherLine) { $key = substr($line,0,strpos($line,'=')); $value = substr($line,strpos($line,'=') + 1, strlen($line)); } else { $value .= $line; } /* Check if ends with single '\' */ if(strrpos($value,"\\") === strlen($value)-strlen("\\")) { $value = substr($value, 0, strlen($value)-1)."\n"; $isWaitingOtherLine = true; } else { $isWaitingOtherLine = false; } $result[$key] = $value; unset($lines[$i]); } return $result; } 

Эта функция была впервые опубликована в моем блоге .

Ну, вы могли бы поместить некоторую конфигурацию в файл свойств и самостоятельно разобрать. Но в PHP это не соответствующий формат.

Я бы определил некоторые константы и поместил их в отдельный конфигурационный файл php (например, config.php) и включил его там, где это необходимо.

Другие варианты состоят в том, чтобы поместить конфигурацию в xml-файл и использовать библиотеку xml для ее чтения. YAML ( php.net ) также является популярным вариантом для простой читаемой конфигурации.

Насколько я знаю, нет встроенных функций PHP для чтения и обработки файлов .properties. Если приложение, которое вы написали в PHP, должно читать файлы Java .properties, вам нужно закодировать свое собственное решение, прочитав файл и создав свой собственный парсер .properties.

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

Если вы предпочитаете, чтобы информация хранилась в XML-файле с помощью парсера PHP XML ( PHP Man Functionulation Reference XML Manipulation ).

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

Вот пример:

Пример файла конфигурации (например: config.php)

 <?php // Typical configuration file $config['database']['type'] = 'mysql'; $config['database']['host'] = 'localhost'; $config['database']['username'] = 'root'; $config['database']['password'] = 'your_password'; $config['database']['database'] = 'your_project'; $config['date']['timezone'] = 'America/Montreal'; ?> 

Конфигурация класса

 <?php class Configuration { protected $configuration; function __construct($filename) { // CFG_PATH : ie --> define('CFG_PATH',dirname(__FILE__) . '/cfg/'); require(CFG_PATH . $filename); $this->setConfiguration($config); } public function getConfiguration($configuration) { return $this->configuration[$configuration]; } public function setConfiguration($configuration) { $this->configuration = $configuration; } } ?> 

Типичный пример использования

 <?php // Your class definitions, variables, functions... function __construct() { $this->configuration = new Configuration(CFG_FILE); $this->set_Timezone($this->configuration->getConfiguration('date')); } private function set_Timezone($configuration) { date_default_timezone_set($configuration['timezone']); } ?> 

Другой пример (контроллер и DAO)

контроллер

 <?php protected function doPost() { ... $configuration = new Configuration(CFG_FILE); $dao = new DAO($configuration->getConfiguration('database')); ... } ?> 

Пример DAO

 <?php function __construct($configuration) { // Build DSN (Data Source Name) string if ($configuration['type'] == 'mysql') { $this->dsn = '(type):host=(host);dbname=(database);charset=UTF8'; $this->dsn = str_replace('(type)', $configuration['type'], $this->dsn); $this->dsn = str_replace('(host)', $configuration['host'], $this->dsn); $this->dsn = str_replace('(database)', $configuration['database'], $this->dsn); $this->options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''); try { $this->databaseHandle = new PDO($this->dsn, $configuration['username'], $configuration['password'], $this->options); } catch (PDOException $e) { ... } } else { ... } } ?> 

Если вы используете Spring framework в Java и хотите получить аналогичное решение для messages.properties в PHP, вы можете адаптировать те же решения, о которых говорилось выше. Конечно, поведение не будет таким же, как Java, но с классом Locale вы можете создавать функции, которые обрабатывают сообщения / метки в вашем приложении PHP, в зависимости от местоположения, где находится клиент.

При таком решении, основанном на массивах, я думаю, что это поможет вам определить требуемые значения в вашем приложении и организовать ваши данные конфигурации. Конечно, есть много других способов добиться этого, но я думаю, что это решения.

В файлах PHP .ini почти одинаковые функции. Существуют простые методы для чтения констант из этих файлов.

В дальнейшем большинство фреймворков PHP реализуют его с файлами конфигурации в основном с расширением .php.

например, в cake php, мы имеем Configure class, который предоставляет как Configure :: read («VarName») и Configure :: write («VarName», VarValue);

после его написания это можно получить в области включения файла.