4

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

您通过自定义编码的 cms 使网站“离线”一点的方法是什么?意思是让管理员能够登录到管理面板,在框中输入消息,然后提交表单。除非用户是管理员,否则该消息将显示给任何用户,而不是任何其他页面。

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

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

谢谢。

4

4 回答 4

6

假设这是在 Apache 上。

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

就像是:

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

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

与 PHP 端的标志检查和离线消息相比,它更快,而且它具有巨大的优势,即上传的图像和样式表等资源也不再可访问 - 否则它们可能通过缓存文件、URL、Google 图片命中...

在基于 PHP 的“离线”机制中,这些资源不会被阻止,如果有人知道 URL,某些资源仍然可以访问,这一事实很难向用户解释(“但我们关闭了网站,不是吗? ") 并且如果该网站因与已发布图像有关的法律问题而被删除(可能发生在每个人身上!),该图像仍然可以在网站所有者不知情的情况下访问。

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

但是,虽然这种方法有其优点,但在实施任何更改之前,您的问题的基本前提还是值得一看的。您说检查删除 XML 文件花费了太多时间。我认为情况并非如此。file_exists()检查在内部缓存,即使对于非常多的请求也不应该导致任何明显的减速。平均 Drupal 或 WordPress 页面会在每个请求上加载数十个包含文件。相比之下,单个 file_exists就相形见绌了。

于 2010-09-03T13:39:32.517 回答
1

只是一个想法:

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

注意:仅当您的所有数据库请求都受到控制时,这才有效。

于 2010-09-03T13:37:11.687 回答
1

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

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

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

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

于 2010-09-03T18:20:08.600 回答
0

也许您可以设置一个 APC 值。由于这些都存储在内存中,所以速度很快。但不要忘记 APC 值不会在服务器重新启动后持续存在。因此,如果您在很长一段时间内需要“维护模式”,您应该将值存储在数据库中。

于 2010-09-03T13:39:58.530 回答