实施网站离线?

时间:2010-09-03 13:31:55

标签: php performance offline-mode

现在不需要这样做,而是考虑未来......

通过自定义编码的cms,您可以通过“脱机”网站获取一些网站的方法是什么?含义赋予管理员登录管理面板,在框中键入消息并提交表单的功能。除非用户是管理员,否则该消息将显示给任何用户而不是任何其他页面。

之前我已经完成了这个并且使用了一个if xml文件,然后从xml文件加载内容并在消息后面添加一个构造背景,其中一个登录框只允许管理员登录。当管理员输入消息时在框中,它将文本存储到xml中。当他们将网站“恢复生机”时,它只会删除xml文件。

唯一的问题是,一旦网站增长,它需要更多的点击并检查文件是否存在每个页面加载变慢。任何人都有更好的解决方案吗?

感谢。

4 个答案:

答案 0 :(得分:6)

假设这是在Apache上。

如果可能的话,我建议使用.htaccess文件将所有请求重新路由到“网站已关闭”消息。

类似的东西:

RewriteRule (.*) /downmessage.php [L]

(请注意,任何图片资源也会被重定向)

与PHP端标记检查和离线消息相比,这更快,而且它具有巨大的优势,即上传的图像和样式表等资源也不再可用 - 否则可能是通过缓存文件,URL ,谷歌图片点击......

在基于PHP的“离线”机制中,这些资源未被阻止,某些资源仍然可以访问的事实如果有人知道URL 很难向用户解释(“但我们把网站搞砸了,不是吗?“)如果网站由于发布图像的法律问题而被取消(可能发生在每个人身上!),图像仍然可以在网站所有者不知情的情况下到达。

这样做的缺点是它需要服务器上的mod_rewrite模块,并且PHP需要具有对.htaccess文件的写访问权限:两种情况并非总是如此。

然而,虽然这种方法有其优点,但在实施任何更改之前,您的问题的基本前提是值得研究的。你说删除XML文件的检查花费了太多时间。我认为不是这样的。 file_exists()检查在内部缓存,即使对于很多请求,也会导致任何明显的减速。平均Drupal或WordPress页面在每个请求上加载了数十个包含文件。比较单个file_exists pales

答案 1 :(得分:1)

只是一个想法:

您可以在数据库处理程序中设置一个标志(例如maintenance = TRUE),然后您可以控制允许或不允许的数据库查询。大多数情况下,您只希望在维护网站时允许读取数据库。

注意:只有在所有数据库请求都受到控制的情况下,这才有效。

答案 2 :(得分:1)

最简单的方法是检查(本地)文件是否存在(可选择输出其内容,如/ etc / nologin)。如果Ops想要关闭该站点,他们可以在每个Web服务器上独立创建它。

在尝试访问数据库之前,在每个页面上执行的一些公共代码中执行此操作。

执行此操作的原因是Ops可能希望在维护期间使数据库脱机,因此您无法将其存储在数据库中。

检查是否存在本地文件是一个非常低的开销操作,不会对正常情况的性能产生太大影响。

答案 3 :(得分:0)

也许你有可能设置一个APC值。由于它们存储在内存中,因此速度很快。但是不要忘记APC值不会在服务器重启时持续存在。因此,如果您需要在很长一段时间内使用“维护模式”,则应将该值存储在数据库中。