2010-09-03 70 views
4

现在不需要这样做,但考虑未来...执行网站离线吗?

什么是你的方法通过自定义编码的cms使网站“脱机”一点点?含义赋予管理员登录到管理面板的能力,在框中键入消息并提交表单。然后,该消息将显示而不是任何其他页面给任何用户,除非用户是管理员。

我之前完成了这个工作,如果存在xml文件,则使用xml文件,然后从xml文件中加载内容,并使用只允许管理员登录的登录框放置构建背景。当管理员键入消息放入它将文本存储到xml中的框中。当他们将网站“重新启动”时,它会简单地删除xml文件。

唯一的问题是,一旦网站增长,它会花费更多的点击和检查每个网页加载速度变慢的文件存在。任何人都有更好的解决方案吗?

谢谢。

回答

6

假设这是在Apache上。

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

喜欢的东西:

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

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

相较于PHP端标志检查和离线消息,这是速度更快,再加上它有巨大的优势,像上传的图像和样式表的资源不再可及 - 通过缓存的文件,URL,谷歌图像点击... ...

在基于PHP的“离线”机制,其中这些资源不被阻止,th事实上,如果有人知道网址很难向用户解释(“但我们把网站关闭了,是不是我们?”),并且由于法律问题导致网站被拒绝,某些资源仍可到达一个已发布的图像(可能发生在每个人身上!),图像仍然可以在没有网站所有者知道的情况下到达。

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

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

+0

但是如果我想让管理员登录呢?这实际上是我第一个想法,但我希望管理员或“员工”有能力看到该网站。 – 2010-09-03 13:43:26

+0

此外:可能您不想拥有纯文本维护页面,但保留页面设计。所以你应该允许访问图像。 – NikiC 2010-09-03 13:45:05

+0

@Capt对于基于'.htaccess'的解决方案来说很难做到,除非您可以为管理员应用IP过滤器或让他们设置特定的用户代理字符串(警告,这将是不安全的!) – 2010-09-03 13:47:45

1

只是一个想法:

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

注意:只有当您的所有数据库请求都受到控制时,这才会起作用。

+0

我不想停止查询的,虽然...这主要是为了更新设计,只需要很小的变化,或其他各种原因。 – 2010-09-03 13:45:04

+0

对不起,我想你会想要在更新期间运行网站,并且只想要'锁定'db。 – fabrik 2010-09-03 13:48:09

0

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

1

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

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

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

检查本地文件的存在是一个非常低的开销操作,它不会非常影响正常情况下的性能。