Каковы рекомендации по самообновлению приложений PHP+MySQL?

Это довольно стандартная практика сейчас для настольных приложений, чтобы быть самообновления. На Mac каждая не-Apple программа, которая использует Искра в моей книге мгновенная победа. Для разработчиков Windows, это уже обсуждалось на расстоянии. Я еще не нашел информацию о самообновляющихся веб-приложениях, и я надеюсь, что вы можете помочь.

Я создаю веб-приложение, которое должно быть установлено как Wordpress или Drupal-распакуйте его в каталог, нажмите некоторую страницу установки, и она готова к работе. Чтобы иметь широкую совместимость с сервером, меня попросили использовать PHP и MySQL-это **MP? В любом случае, он должен быть в целом кросс-платформенным. Для контекста это в основном единое приложение для обмена веб-сообщениями для малого бизнеса. Это не другая платформа CMS, подумайте о веб-почте.

Я хочу знать о самообновлении веб-приложений. Прежде всего, (1) это плохая идея? Начиная с Wordpress 2.7 автоматическое обновление одна кнопка, которая кажется легкой, и все же я могу представить так много способов, как это может пойти ужасно, ужасно неправильно. Кроме того, разве идея о том, что веб-файлы доступны для записи веб-процессом, не является дырой в безопасности?

(2) стоит ли время развития? В мире, вероятно, миллионы установок WP, поэтому, вероятно, стоит времени, которое потребовалось команде WP, чтобы сделать это легко, экономя миллионы человеко-часов по всему миру. Я могу только представить себе несколько тысяч установок моего программного обеспечения ... самостоятельное обновление стоит затрат времени, или я могу предположить, что пользователи достаточно сложные, чтобы загрузить и установить веб-программное обеспечение в первую очередь может пройти контрольный список обновления?

Если это не катастрофа безопасности или пустая трата времени, то (3) я ищу предложения от всех, кто делал это раньше. Вы храните таблицу версий в своей базе данных? Как вы управляете обновлениями БД? Какой метод вы используете для отката частичного обновления в контексте самообновляющегося веб-сайта заявление? Делает ли использование слоя ORM проще или сложнее? Вы сохраняете дельту изменений версии или вы просто задуваете все это каждый раз?

Я ценю ваши мысли по этому поводу.

7 ответов


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

Я два шага:

1) серьезно спросите себя, что ваши пользователи, вероятно, действительно нужно. Обеспечит ли самообновление достаточный импульс для принятия, чтобы оправдать дополнительную работу? Если вы уверены, что ответ "да", просто сделайте он.

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

2) версии 1.0 без функции. Дождитесь отзывов пользователей. Ваши пользователи могут немедленно потребовать более простого процесса обновления, и в этом случае вы должны установить его приоритет. Кроме того, вы можете обнаружить, что ваши пользователи гораздо больше обеспокоены какой-то другой функцией.

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


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

$wp_db_version загружается из wp-includes/version.php. Эта переменная соответствует номеру редакции Subversion и обновляется при wp-admin/includes/schema.php изменяется. (Возможно, через крюк? Я не уверен.), Когда wp-admin/admin.php загружается, опция WordPress с именем db_version читать из база данных. Если это число не равно $wp_db_version, wp-admin/upgrade.php загружается.

wp-admin/includes/upgrade.php включает в себя функцию под названием dbDelta(). dbDelta() сканирование $wp_queries (строка SQL-запросов, которая создаст самую последнюю схему базы данных с нуля) и сравнивает ее со схемой в базе данных, изменяя таблицы по мере необходимости, чтобы схема была обновлена.

upgrade.php затем запускается функция upgrade_all(), который работает конкретно upgrade_NNN() функции если $wp_db_version меньше чем целевые значения. (т. upgrade_250(), обновление WordPress 2.5.0 будет запущено, если версия базы данных меньше 7499.) Каждая из этих функций выполняет собственные процедуры миграции и заполнения данных, некоторые из которых вызываются во время сценария начальной установки базы данных. Хорошо сокращает дубликат кода.

Итак, это один из способов сделать это.


Да, это была бы функция безопасности, если PHP пошел и переписал свои файлы из какого-то места в интернете без предупреждения. Нет никакой гарантии, что сервер правильно подключается к код update server (он может загрузить чей - то код, созданный кем-то другим, если произошло отравление DNS) - предоставление кому-то другому доступа к данным вашего клиента. Поэтому цифровая подпись будет иметь важное значение.

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

остается один вопрос (я действительно не знаю ответа): может ли PHP перезаписывать файлы, если он в настоящее время их использует (например, если обновление.сам файл php необходимо обновить)? Стоит проверить.


Я полагаю, вы уже исключили это, но вы можете разместить его как услугу. (Думаю wordpress.com)


Я бы предложил вам упаковать ваше приложение с груша и настройка канала. Затем пользователи могут обновить приложение через стандартный интерфейс (pear). Это не совсем автоматически (если у пользователей нет какой-то автоматизации, работающей поверх pear), но это стандарт, поэтому любой системный администратор может поддерживать его.


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

Как вы упомянули, существует ряд потенциальных проблем безопасности. Из-за только тех, Я бы предложил не делать этого. Вместо этого попробуйте создать довольно умный сценарий обновления.


только мои 2 цента: я бы рассмотрел автоматическое самообновление приложения в моей CMS как дыру в безопасности, поэтому, если вы решите закодировать эту функцию, вы должны рассмотреть возможность реализации различных уровней этого поведения:

  • автоматическое обновление
  • проверить наличие обновлений и уведомляет
  • отключить