Сохранение настроек для последующего редактирования в PHP
Вопрос
Я пишу PHP-приложение, которое будет иметь возможность редактировать настройки через веб-интерфейс.Я не имел в виду для пользователя (и на самом деле, это будет только администраторы), чтобы иметь возможность загружать файл в текстовый редактор, но, скорее, они вносят изменения с помощью формы, и это изменит файл настроек (и делайте и другие вещи).
На данном этапе разработки настройки хранятся в PHP-файле, например:
define ('UPLOAD_DIR','uploads/'); define ('DISPLAY_NUM',true); $names = array('a' => 'b','c'=>'d','e'=>'f');
Однако синтаксический анализ массивов (а они становятся более сложными (т. е. многоуровнево вложенными), чем описанные выше) не кажется таким уж забавным.И поскольку определенные настройки можно добавлять и удалять, чтение всего файла, а затем повторная запись всех настроек также не кажется забавным.
Каковы преимущества и недостатки использования следующих форматов?(И любые другие, которые я пропустил):
- Пользовательский XML
- INI (возможность использовать parse_ini_file)
(Используя базу данных не является подходит в соответствии с требованиями к проекту.Я понимаю, что во многих ситуациях предпочтительнее использовать базу данных, но не в этом случае.)
Если бы вы не смогли использовать базу данных и должны были хранить настройки, которые можно редактировать с помощью веб-интерфейса, что бы вы сделали?
(Примечание:Это другой вопрос, чем этот, где настройки не могут быть изменены, это полностью PHP-файл.И да, программа установки в данный момент записывает PHP-файл с правильными настройками.)
Решение 2
Хорошо, я не получил никакого ответа, который искал.Вот чего я ожидал от вас.
INI
- Сохранение настроек в INI-файле может подойти для простых настроек, которые вы хотите, чтобы пользователь редактировал вручную.
- Однако создавать сложные массивы непросто, и потребуется некоторая умственная акробатика, чтобы понять, какой заголовок находится на каком уровне массива.
- Зарезервированные слова, которые не должны использоваться нигде в файле, включают:да, нет, истинно и ложно, это может быть проблематично.
- Константы могут быть использованы в файле.
- Нет встроенного метода записи INI-файлов.
XML - ФАЙЛ
- Может использовать расширение SimpleXML, которое "предоставляет очень простой и легко используемый набор инструментов" для превращения XML в объект, который затем может быть обработан с использованием обычных методов.
- Позволяет использовать очень сложные массивы.
- При необходимости можно отредактировать вручную.
- Можно использовать внешние инструменты для проверки достоверности файла.
- Для PHP доступно множество XML-процессоров.
ЯМЛ
- http://yaml.org/
- http://www.techyouruniverse.com/software/dont-use-yaml-for-php-use-parse%5Fini%5Ffile
Запомни:нет базы данных.Требуется умение использовать сложные массивы.
Другие советы
Если вы не привержены использованию XML, возможно, вам захочется рассмотреть ЯМЛ.Я использовал его только с Ruby, но быстро Google предполагает, что существует несколько вариантов поддержки PHP.TBF, ссылки там включают некоторые аргументы против используя YAML с PHP, но YMMV.
Мне бы не понравилась идея о том, что кто-то имеет прямой доступ к настройкам, поэтому важно предоставить интерфейс, который будет действовать как буфер, предотвращая преднамеренные атаки и обеспечивая чистый вывод.
Имея это в виду, выбор формата на стороне сервера совсем не важен, пока вы можете корректно взаимодействовать с ним, все остальные проблемы можно обойти.
Я бы порекомендовал пользовательский XML-файл, тогда ваша конфигурация будет хорошо масштабироваться, и вы сможете использовать библиотеки PHP XML для доступа к нему.
Краткий пример:
<myconfig>
<define>
<name>UPLOAD_DIR</name>
<value>uploads/</value>
</define>
<define>
<name>DISPLAY_NUM</name>
<value>true</value>
</define>
<array id="names">
<value index="a">b</value>
<value index="c">d</value>
<value index="e">f</value>
</array>
</myconfig>
PHP имеет встроенные функции для редактирования и синтаксического анализа INI-файлов, которые используют обычный текстовый формат для хранения настроек программы.
Я использовал двухэтапный подход.Переменные и их имена хранятся в базе данных с интерфейсом, который дает пользователю возможность изменять их.Когда они изменяют их, файл сохраняется на сервере, а затем на него ссылаются во всем приложении (изменения также сохраняются обратно в базу данных).Упрощает обновление и делает резервные копии простыми - нет необходимости создавать резервные копии файлов, просто создайте резервную копию базы данных.Результирующие файлы - это просто файлы .inc в формате $variableName = 'переменное значение';
И почему не обычный php?
configure-form.php
форма method=POST action='configure.php'
,
поля ввода, например. name='upload' value='<?php echo UPLOAD; ?>'
a configure.php файл:
$myfile = 'sets.php';
$fh = fopen( $myfile, 'w' );
$upload = '"/upload/"';
$txt = "define( UPLOAD, '" . $_POST['upload'] . "' );";
fwrite( $fh, $txt );
fclose( $fh );
и вот оно у вас есть.Простой php, который создает файл конфигурации для вас.