自我更新PHP + MySQL应用程序的最佳实践是什么?

Bar*_*all 26 php mysql security upgrade

现在,桌面应用程序可以自我更新,这是非常标准的做法.在Mac上,在我的书中使用Sparkle的每个非Apple程序都是即时获胜.对于Windows开发人员,已经详细讨论过这个问题.我还没有找到有关自我更新的Web应用程序的信息,我希望您能提供帮助.

我正在构建一个像Wordpress或Drupal一样安装的Web应用程序 - 将其解压缩到一个目录中,点击一些安装页面,它就可以了.为了获得广泛的服务器兼容性,我被要求使用PHP和MySQL - 那是**MP吗?无论如何,它必须是广泛的跨平台.对于上下文,这基本上是针对小型企业的统一Web消息传递应用程序.它不是另一个CMS平台,想想网络邮件.

我想了解自我更新的Web应用程序.首先,(1)这是一个坏主意吗?从Wordpress 2.7开始,自动更新只是一个按钮,看起来很简单,但我可以想象这么多的方式可能会非常糟糕,非常错误.另外,网络进程是不是可以写入安全漏洞的想法?

(2)开发时间值得吗?世界上可能有数以百万计的WP安装,所以值得花时间让WP团队轻松实现,在全球范围内节省数百万工时.我只能想象几千个我的软件安装 - 正在构建自我升级值得花时间投资,还是我可以假设用户足够先进,下载和安装网络软件可以通过升级核对清单?

如果这不是安全灾难或浪费时间,那么(3)我正在寻找任何以前做过的人的建议.你在数据库中保留了一个版本表吗?你如何管理数据库升级?在自我更新的Web应用程序的上下文中,您使用什么方法回滚部分升级?使用ORM层是否更容易或更难?你是否保留了版本变化的三角形,或者你每次只是吹灭整个事物?

我很感激你对此的看法.

Fra*_*mer 13

坦率地说,它确实取决于您的用户群.有大量PHP应用程序不会自动升级.他们的用户要么技术足以处理升级过程,要么就是不升级.

我的目的是两个步骤:

1)认真地问自己用户可能真正需要什么.自我更新是否足以提高采用率以证明额外工作的合理性?如果您确信答案是肯定的,那就去做吧.

既然你在这里问,我猜你还不知道.在那种情况下,我的目的是第2步:

2)发布没有该功能的1.0版.等待用户反馈.您的用户可能会立即为更简单的升级过程而哭泣,在这种情况下您应该优先考虑它.或者,您可能会发现您的用户更关心其他一些功能.

在不询问用户的情况下猜测用户的需求是一种浪费大量开发时间的好方法.


Ann*_*rom 5

我最近一直在考虑有关数据库架构更改的问题。目前我正在深入研究 WordPress,看看他们如何处理修订之间的数据库更改。这是我到目前为止发现的:

$wp_db_version加载自wp-includes/version.php. wp-admin/includes/schema.php该变量对应于 Subversion 修订版号,并在更改时更新。(可能通过钩子?我不确定。)加载时,将从数据库中读取wp-admin/admin.php名为的 WordPress 选项。db_version如果该数字不等于$wp_db_versionwp-admin/upgrade.php则加载。

wp-admin/includes/upgrade.php包括一个名为 的函数dbDelta()dbDelta()扫描$wp_queries(一串 SQL 查询,将从头开始创建最新的数据库架构)并将其与数据库中的架构进行比较,根据需要更改表,以便架构保持最新。

upgrade.php然后运行一个名为的函数,如果小于目标值,该函数upgrade_all()将运行特定upgrade_NNN()函数。$wp_db_version(即upgrade_250(),如果数据库版本低于 7499,则将运行 WordPress 2.5.0 升级。)每个函数都运行自己的数据迁移和填充过程,其中一些在初始数据库设置脚本期间调用。很好地减少了重复代码。

所以,这是一种方法。


小智 5

是的,如果 PHP 在没有任何警告的情况下从互联网上的某个位置覆盖其文件,这将是一个安全功能。无法保证服务器正确连接到您的更新服务器(如果发生 DNS 中毒,它可能会下载其他人编写的代码) - 让其他人能够访问您的客户端数据。因此,数字签名很重要。

用户可以通过设置 Web 目录的权限来控制更新,以便 PHP 只能读取文件 - 这个过程可以简单地记录在您的程序中。

仍然存在一个问题(我真的不知道答案):如果 PHP 当前正在使用文件,它是否可以覆盖它们(例如,如果 update.php 文件本身需要更新)?值得测试。