2008-11-12 2 views
7

Я написал небольшое приложение PHP, которое я хотел бы распространять. Я ищу лучшие практики, чтобы его можно было установить на большинстве веб-хостов с минимальными проблемами.Распространение небольшого PHP-приложения

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

Так что мои вопросы:

1) Как я должен обрабатывать значение конфигурации? Я не использую базу данных, поэтому файл конфигурации кажется подходящим. Я знаю, что другие приложения php (например, Wordpress) используют, но они глобальны, и существует вероятность, что имена конфликтуют. (Очевидно, что глобальные переменные также имеют одинаковую проблему). Я посмотрел на файловый механизм «ini», встроенный в PHP. Он позволяет добавлять комментарии только вверху, поэтому вы не можете легко комментировать все настройки, и вы не можете проверить синтаксис с помощью «php -f». Другие варианты?

2) Как обращаться с шаблонами? Приложение должно выкачать форму. Возможно с сообщением об ошибке. (например, «Извините, неверный пароль».) У меня есть переменная класса с формой HTML, но также разрешено использовать внешний файл шаблона (указанный в конфиге). Я делаю некоторые тривиальные поиска и замены - например, % SCRIPT% на имя скрипта,% STATUS%, чтобы удерживать сообщение об ошибке. Это немного похоже на переосмысление колеса, но в том числе система шаблонов, такая как Smarty, переполнена. (Плюс у них уже может быть система шаблонов.) Другие варианты?

3) i18n - Есть только 3 строки сообщений, и gettext, похоже, не устанавливается повсеместно. Разве это такая плохая идея просто сделать эти три параметра строки в файле конфигурации?

4) Как лучше всего интегрироваться с другими системами? Мое приложение - это один класс. Итак, я думал, что могу просто включить php-скрипт, который показал, как был вызван класс. Это было бы отправной точкой для людей, которые должны были интегрировать их в другую структуру, но также быть в порядке, как и для тех, кто не заинтересован в настройке. Разумно?

5) Параметры GET/POST - это плохая форма для класса, чтобы смотреть на $ _GET и $ _POST? Должны ли все ценности быть переданы в мой класс во время строительства?

Спасибо.

ответ

7

Конфигурация

Вы можете использовать PHP файл, как это:

<?php 
return array(
    'option1' =&gt; 'foobar', 
    'option2' =&gt; 123, 
    //and so on... 
); 
?> 

И в главном классе просто использовать:

$config = (array) include 'path/to/config/file'; 

И если вы планируете в основном распространять свой класс, как компонент в других приложениях, а затем просто поместите config array/object в качестве параметра в конструктор вашего класса и оставьте детали пользователю.

Шаблонирование

Для такого простого применения метода ваш описанный должно быть достаточно. Помните, что вы всегда можете расширить свой класс и перегрузить свой метод вывода своим.

I10N

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

Интеграция

Комментарий каждый публичный метод (или даже лучше, также защищены и частные) с объяснениями, что они делают, и какие параметры необходимы. Если вы объедините это с примером, этого должно быть достаточно для большинства пользователей.

GET против POST

Ваш класс использует пароли, и вы даже думаете отправки их через GET? ;) Подумайте о истории браузера, заголовках рефери и т. Д. Там будут видны пароли ваших пользователей.

+0

Мне нравится этот стиль конфига! Я собираюсь попробовать это прямо сейчас. – 2008-11-13 00:52:42

2
  1. Может ли config быть локальным для экземпляров класса? Или вы могли бы создать небольшой класс, который мог бы создать экземпляр запроса для значений конфигурации? Также добавление любых глобальных варов с именем вашего приложения должно каким-то образом остановить столкновение.

  2. Если ваш шаблон очень простой, просто напишите короткий templater. Это будет легче, чем пытаться избежать проблем, возникающих у людей с любым сторонним templater. Это может также упростить вопросы лицензирования. Если вы начнете беспокоиться о том, что у них уже есть, вы никогда ничего не выпустите. Слишком много комбинаций.

  3. Для 3 строк? Да, так же, как вы управляете конфигурацией.

  4. Хорошие комментарии во всем тексте, в котором объясняется, как вы используете класс.

  5. Я так не считаю. Если это беспокоит вас, вы можете использовать аргументы по умолчанию использовать приведенные аргументы, а затем найти значения GET/POST, если ничего не предусмотрено (хотя это может представлять угрозу безопасности)

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

Одним из примеров является то, что shorttags не включены в некоторых хостах (вы должны использовать <?php ... ?> и <?php echo "..."?> вместо <? ... ?> или <?= "..." ?>), который может быть королевским PITA.

2

В дополнении к хорошему совету Кшиштофа:

  • Используйте <?php только
  • Если вы используете функции, которые могут быть отключены, используйте function_exists(), чтобы убедиться, что они доступны. @missing_function() заставляет PHP умереть без каких-либо ошибок.
  • Вы не можете полагаться на вещи, которые можно отключить/изменить с помощью php.ini. Используйте ini_get() для адаптации к различным настройкам.
  • Если включено magic_quotes, сбрасывание полосы только с вашей копии ввода - не изменяйте глобальные массивы! Безопасность какого-либо хромого кода может зависеть от присутствия этих косых черт.
  • Ожидайте, что пользователи бездумно скопируют & вставьте код из вашей документации/веб-сайта.
+0

«Использовать только 2008-11-13 00:00:18