Каков наилучший способ хранения динамических настроек в php?

Было просто интересно, есть ли у кого-нибудь хорошая система для хранения / обновления динамических настроек в php?

То, что я подразумеваю под динамикой, – это настройки, которые автоматически изменяются с помощью других сценариев.

В настоящее время мы используем систему, которая в основном file_get_contents наш файл настроек php, рассматривает это как строку, изменяет параметры и file_put_contents обновленные настройки.

Он работает, но его немного грязно. Любые другие рекомендации, в которых мы можем хранить / изменять / извлекать эти настройки? Mysql НЕ является опцией, мы хотим избежать дополнительных запросов.

В качестве дополнительного бонуса, какая-то система, которая может обмениваться этими данными по нескольким серверам, поскольку многие из этих параметров используются в нескольких ящиках. Но я полагаю, что мы можем справиться с этим отдельно.

Спасибо!

Следует иметь в виду, если вы придерживаетесь файлового подхода:

Использование собственного парсера

Парсер, написанный на C, скорее всего, будет быстрее, чем один в PHP. Два варианта, которые приходят на ум, – это

Используйте файл settings.php , содержащий хорошо сформированный PHP-код. Один из подходов, который я использовал в прошлом, – это файл, который выглядит как

 <?php return array( 'key' => 'value' ); 

Этот файл может include -d один или несколько раз, а оператор include возвращает массив конфигурации. Когда вы пишете новые настройки, используйте var_export() для получения действительного php-кода.

Другой подход – использовать файл settings.csv . Чтение с использованием fgetcsv() , запись с использованием fputcsv() .

Избегание «частичных» сбережений

Чтобы избежать чтения частичного файла во время обновления параметров, сначала запишите новые параметры во временный файл, а затем переместите этот файл в местоположение файла настроек (предпочтительнее использовать mv (1) на * nix).

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

Mysql НЕ является вариантом, мы хотим избежать дополнительных запросов

О, Боже.

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

В самом деле, я бы рекомендовал реализовать хранение и извлечение значений в специальном обработчике сеанса привязки к базе данных (и включении сессий для всех запросов).

Существуют и другие инструменты, которые вы могли бы использовать: базы данных nosql и memcache, являющиеся очевидными кандидатами, – но они имеют меньший смысл, когда у вас уже есть экземпляр MySQL.

(общая память и хранилище переменных APC имеют те же проблемы, что и хранилище на основе файлов)

Если вы не хотите использовать MySql, я думаю, что то, что вы делаете прямо сейчас, является лучшим решением, любая система записи свойств / ini-файлов будет намного дороже и не решит проблемы одновременного доступа. Чтобы устранить проблему, я предлагаю вам записать обновленный файл во временный файл в той же папке, удалив старые параметры.php и переименуйте файл temp в settings.php. все еще есть небольшая вероятность, что запрос будет сделан сразу после удаления settings.php и до того, как файл temp будет переименован, который можно обработать, выполнив что-то вроде этого, когда вы включите файл:

 if( file_exists( 'settings.php' ) ) { include( 'settings.php' ); } else { /* ... wait 100 miliseconds or so and try again... do this a few times and then fail ... */ } 

это должно быть совершенно безопасным.

Я бы сказал файлы ini. parse_ini_file() ( http://php.net/manual/en/function.parse-ini-file.php ) – отличная функция, которая заботится о чтении, и ответ на письмо прямо здесь: создать ini-файл, написать значения в PHP

Для этого мы используем это: http://projects.jgotti.net/projects/simplemvc/browse/trunk/includes/fx-conf.php читаем и записываем в простые текстовые файлы, содержащие пары ключ = значения.

parse_conf_file может загружать confs как определенные значения или возвращать ассоциативный массив ключевых значений. Write_conf_file позволяет вам переписать только нужные значения, передав массив значений ключей в качестве параметров.

Если у вас allow_url_fopen установлено значение true, вы можете без проблем загрузить файл конфигурации с другого сервера.

Надеюсь, что эта помощь