代码之家  ›  专栏  ›  技术社区  ›  Barnabas Kendall

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

  •  26
  • Barnabas Kendall  · 技术社区  · 16 年前

    现在,桌面应用程序的自我更新是相当标准的做法。在Mac上,每一个使用 Sparkle this has already been discussed at length . 我还没有找到关于自我更新web应用程序的信息,希望您能提供帮助。

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

    我想了解自我更新的web应用程序。首先,(1)这是个坏主意吗?从Wordpress 2.7开始,自动更新只需一个按钮,这似乎很简单,但我可以想象,这可能会在很多方面出错。另外,web文件可由web进程写入的想法难道不是一个安全漏洞吗?

    (2) 值得花时间开发吗?世界上可能有数以百万计的WP安装,因此WP团队花时间简化安装,在全世界节省数百万工时,这可能是值得的。我只能想象几千次安装我的软件——构建自我升级是否值得投入时间,或者我是否可以假设那些足够成熟、能够下载和安装web软件的用户可以通过升级清单?

    如果这不是一个安全灾难或浪费时间,那么(3)我正在寻找任何曾经这样做过的人的建议。您是否在数据库中保留版本表?如何管理数据库升级?在自更新web应用程序的上下文中,您使用什么方法回滚部分升级?使用ORM层是更容易还是更难?你是保留一个版本变更的增量,还是每次都把整个事情搞砸?

    我很感激你的想法。

    7 回复  |  直到 8 年前
        1
  •  13
  •   Frank Farmer    16 年前

    1) 认真问问自己,你的用户可能真正需要什么。自我更新是否足以促进采用,从而证明额外工作的合理性?如果你确信答案是肯定的,就去做吧。

    既然你在这里问,我猜你还不知道。在这种情况下,我希望第2步:

    2) 发布版本1.0,但不包含此功能。等待用户反馈。您的用户可能会立即要求更简单的升级过程,在这种情况下,您应该优先考虑它。或者,您可能会发现您的用户更关心一些其他功能。

        2
  •  4
  •   Annika Backstrom    16 年前

    $wp_db_version 是从 wp-includes/version.php . 此变量对应于Subversion版本号,并在 wp-admin/includes/schema.php 改变了。(可能是通过钩子?我不确定)什么时候 wp-admin/admin.php 加载后,WordPress选项名为 db_version , wp-admin/upgrade.php 已加载。

    wp-admin/includes/upgrade.php dbDelta() dbDelta() $wp_queries (一组SQL查询,将从头创建最新的数据库架构),并将其与数据库中的架构进行比较,根据需要更改表,以使架构保持最新。

    upgrade.php 然后运行一个名为 upgrade_all() 哪个运行特定的 upgrade_NNN() 功能如果 $wp\U db\U版本 小于目标值。(即。 upgrade_250()

    所以,这是一种方法。

        3
  •  4
  •   Gareth Williams    13 年前

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

    用户可以通过在web目录上设置权限来控制更新,这样PHP就只有文件的读取权限——这个过程可以简单地用程序记录下来。

        4
  •  3
  •   Tom Wright    16 年前

    我想您已经排除了这一点,但您可以将其作为服务托管。(想想wordpress.com)

        5
  •  3
  •   troelskn    16 年前

    我建议你用 pear set up a channel . 然后,用户可以通过标准接口(pear)升级应用程序。它不是完全自动的(除非用户在pear上运行某种自动化),但它是标准的,所以任何系统管理员都可以维护它。

        6
  •  1
  •   Kalium    16 年前

    我认为最好的选择是更新检查机制,当有更新时,它会提醒管理员。

    正如您所提到的,存在许多潜在的安全问题。由于这些原因,我建议不要这样做。相反,尝试创建一个相当智能的升级脚本。

        7
  •  1
  •   Csaba Kétszeri    16 年前

    我的2美分:我会考虑在CMS中自动更新应用程序作为一个安全漏洞,所以如果您决定编写这个功能,您应该考虑实现不同级别的这种行为:

    • 自动更新
    • 检查更新并通知
    • 使残废