【发布时间】:2009-01-18 18:35:42
【问题描述】:
我正在用PHP写一个web app,又到了搭建更新系统的时候,需求之一就是自动更新,我该怎么做呢?
我想在没有 cron 的情况下执行此操作,因此我将不得不在向系统发出请求时检查更新,我是否应该仅在具有重要权限的管理员登录时才这样做这将是最好的,但至少有 1 位客户表示他们不想要这个,因为他们只打算每隔几个月登录一次,而且他们仍然希望获得安全更新。
【问题讨论】:
我正在用PHP写一个web app,又到了搭建更新系统的时候,需求之一就是自动更新,我该怎么做呢?
我想在没有 cron 的情况下执行此操作,因此我将不得不在向系统发出请求时检查更新,我是否应该仅在具有重要权限的管理员登录时才这样做这将是最好的,但至少有 1 位客户表示他们不想要这个,因为他们只打算每隔几个月登录一次,而且他们仍然希望获得安全更新。
【问题讨论】:
也许您可以在您的网站上创建一个页面,该页面会返回一个带有最新版本号的小型 XML 文件和一个供下载的 URL:
<xml>
<version>1.x.y</version>
<url>http://example.com/current.tgz </url>
</xml>
如果管理员选择执行和升级,您的应用程序将不需要知道 XML 文件的 URL 和当前版本号以外的任何内容。
当然,这是一个非常有限的例子,您可以在此基础上扩展您的内心。
【讨论】:
当然要使用版本控制!
我在我的大多数生产站点中都包含了这个“插件”: 当然,你需要先为此创建一个权限受限的机器人svn账号,并且必须在服务器上安装svn。
<?php
echo(' updating from svn<br>' );
$username = Settings::Load()->Get('svn','username');
$password = Settings::Load()->Get('svn','password');
echo(" <pre>" );
$repos = Settings::Load()->Get('svn' , 'repository');
echo system ("svn export --username={$username} --password {$password} {$repos}includes/ ".dirname(__FILE__)."/../includes --force");
echo system("svn export --username={$username} --password {$password} {$repos}plugins/ ".dirname(__FILE__)."/../plugins --force");
die();
当然,请确保将其放在 .htpasswded 站点后面,并确保不要从 SVN 更新“生产设置”。 等等,你用一个 HTTP 查询更新你的完整代码库到你的站点 :) SVN 自动覆盖文件,没有隐藏文件或文件夹留下,它很容易适应更新或恢复到特定版本。 现在您的团队需要做的就是提交到他们的 SVN 存储库,在测试环境中运行这段代码,确保一切正常,然后在生产环境中运行:)
【讨论】:
谁将创建更新?如果是您,为什么不在更新完成时将更新推送到服务器?写入更新后,只需对其进行 rsync,服务器将立即更新。它胜过 cron,而且绝对胜过在您的用户等待页面加载时进行检查。
【讨论】: