Сохранение настроек, редактировать позже, в PHP - PullRequest
2 голосов
/ 11 мая 2009

Я пишу PHP-приложение, которое будет иметь возможность редактировать настройки через веб-интерфейс. Я не имел в виду, что пользователь (и на самом деле, это будет admins ), чтобы иметь возможность загрузить файл в текстовом редакторе, скорее, они вносят изменения, используя форму, и это изменит файл настроек (и сделает также другие вещи ).

На этом этапе разработки настройки хранятся в файле PHP, например:

define ('UPLOAD_DIR','uploads/');
define ('DISPLAY_NUM',true);
$names = array('a' => 'b','c'=>'d','e'=>'f');

Однако синтаксический анализ массивов (и они становятся более сложными (то есть многоуровневыми вложенными), чем описанные выше) не выглядит таким забавным. А поскольку конкретные параметры можно добавлять и удалять, чтение всего файла, а затем повторная запись всех параметров также не кажется интересным.

Каковы преимущества и недостатки использования следующих форматов? (И любые другие, которые я пропустил):

  • Пользовательский XML
  • INI (возможность использовать parse_ini_file)

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

Если вы не смогли использовать базу данных и должны были сохранить настройки, которые можно редактировать с помощью веб-интерфейса, что бы вы сделали?

(Примечание: этот вопрос отличается от этого , где настройки нельзя изменить, это PHP-файл полностью. И да, в настоящее время программа установки записывает PHP-файл с правильные настройки.)

Ответы [ 7 ]

2 голосов
/ 11 мая 2009

Если вы не привержены использованию XML, вы можете рассмотреть YAML . Я использовал его только с Ruby, но быстрый Google предполагает, что есть несколько вариантов поддержки PHP. TBF, ссылки там включают некоторые аргументы против , использующие YAML с PHP, но YMMV.

1 голос
/ 19 мая 2009

ОК, я не получил никакого ответа, который искал. Вот то, чего я ожидал.

INI

  • Хранение настроек в INI-файле может подходить для простых настроек, которые вы хотите, чтобы пользователь редактировал вручную.
  • Однако создать сложные массивы непросто, и для понимания того, какой заголовок находится на каком уровне массива, потребуется некоторая умственная акробатика.
  • Зарезервированные слова, которые нельзя использовать где-либо в файле, включают: да, нет, истина и ложь, это может быть проблематично.
  • В файле можно использовать константы.
  • Нет встроенного метода записи INI-файлов.

XML

  • Может использовать расширение SimpleXML, которое «предоставляет очень простой и легко используемый набор инструментов», чтобы превратить XML в объект, который затем может быть обработан с использованием обычных методов.
  • Позволяет использовать очень сложные массивы.
  • Возможно редактирование вручную, если требуется.
  • Может использовать внешние инструменты для проверки правильности файла.
  • Многие PHP-процессоры доступны для PHP.

YAML

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

0 голосов
/ 01 апреля 2010

А почему не обычный php?

Configure-form.php

форма method=POST action='configure.php',

поля ввода напр. name='upload' value='<?php echo UPLOAD; ?>'

файл configure.php:

$myfile = 'sets.php';
$fh = fopen( $myfile, 'w' );
$upload = '"/upload/"';
$txt = "define( UPLOAD, '" . $_POST['upload'] . "' );";
fwrite( $fh, $txt );
fclose( $fh );

и вот оно у вас. Простой PHP, который создает файл конфигурации для вас.

0 голосов
/ 12 мая 2009

Я использовал двухэтапный подход. Переменные и их имена хранятся в базе данных с интерфейсом, который дает пользователю возможность их изменять. Когда они изменяют их, файл сохраняется на сервере и затем обращается через приложение (изменения также сохраняются обратно в БД). Упрощает обновление и делает резервное копирование простым - не нужно делать резервные копии файлов, просто сделайте резервную копию базы данных Полученные файлы - это просто файлы .inc в формате $ variableName = 'variablevalue';

0 голосов
/ 11 мая 2009

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

0 голосов
/ 11 мая 2009

Я бы порекомендовал собственный 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>
0 голосов
/ 11 мая 2009

Мне бы не хотелось, чтобы кто-то имел прямой доступ к настройкам, поэтому важно предоставить интерфейс, который будет действовать как буфер, предотвращая преднамеренные атаки и обеспечивая чистый вывод.

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

...