您有两个场景需要处理:
Web服务器可以写入文件。
Web服务器无法写入文件。
这只是指示您是要解压缩一个zip文件,还是使用ftp更新文件。在另一种情况下,您的第一步是转储数据库和备份现有文件,这样当出现严重错误时,用户可以回滚。正如其他人所说,重要的是将用户可能自定义的任何内容保留在更新范围之外。Wordpress做得很好。如果用户对核心逻辑代码进行了更改,那么他们可能足够聪明,能够自己解决任何合并冲突(并且足够聪明,能够知道一次单击升级可能会丢失修改)。
第二步是确保在浏览器关闭时脚本不会死掉。这是一个不应该被打断的过程。你可以通过
ignore_user_abort(true);
或其他方法。或者,如果你愿意,允许用户勾选一个框,上面写着“即使我断开了连接,也要继续”。我假设您将在内部处理错误。
现在,根据权限的不同,您可以:
将要更新的文件压缩到system/tmp目录
将要更新的文件压缩为主目录中的临时文件
然后你就可以:
下载并解压缩更新
en situ
或就位。
下载更新并将其解压缩到系统的/tmp目录,然后使用ftp更新web根目录中的文件。
然后您可以:
根据需要应用任何SQL更改
询问用户是否一切正常
如果情况不好,请后退
清除system/tmp目录中的temp目录,或用户web root/home目录中的任何临时文件。
最重要的方面是确保在情况恶化时可以回滚更改。另一个需要确保的是,如果使用/tmp,请确保检查临时区域的权限。
0600
应该做得很好。
看看WordPress和其他人是怎么做到的。如果您对许可证的选择和他们的同意,您甚至可以重新使用其中的一些代码。
祝你的项目好运。