现在不需要这样做,而是考虑未来......
通过自定义编码的cms,您可以通过“脱机”网站获取一些网站的方法是什么?含义赋予管理员登录管理面板,在框中键入消息并提交表单的功能。除非用户是管理员,否则该消息将显示给任何用户而不是任何其他页面。
之前我已经完成了这个并且使用了一个if xml文件,然后从xml文件加载内容并在消息后面添加一个构造背景,其中一个登录框只允许管理员登录。当管理员输入消息时在框中,它将文本存储到xml中。当他们将网站“恢复生机”时,它只会删除xml文件。
唯一的问题是,一旦网站增长,它需要更多的点击并检查文件是否存在每个页面加载变慢。任何人都有更好的解决方案吗?
感谢。
答案 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值不会在服务器重启时持续存在。因此,如果您需要在很长一段时间内使用“维护模式”,则应将该值存储在数据库中。