Сохранение настроек для последующего редактирования в PHP

StackOverflow https://stackoverflow.com/questions/847678

  •  21-08-2019
  •  | 
  •  

Вопрос

Я пишу 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-процессоров.

ЯМЛ

Запомни:нет базы данных.Требуется умение использовать сложные массивы.

Другие советы

Если вы не привержены использованию 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, который создает файл конфигурации для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top