上网多年,是否看到过数据库错误,导致网站无法访问的情况?我在想在没有数据库哥们的支持的情况下,如何让您的Apache兄弟继续为来访用户服务?(包含但不仅限于Wordpress)

本来是更新一下db-error.php的,却想到了更好的解决方案,就来分享一下如何对应这种情况:

当WordPress连接数据失败的情况下,会调用wp-content/db-error.php这个文件来作为页面提示。也就是说数据库挂掉界面可以在这里定义。我之前的方案是报错后5秒后自动转向到我的feed烧录地址feed.cbmland.com,因为我觉得这里或许能有用户需要的内容,也不至于网站打不开而尴尬至极。

而当数据挂掉的时候,能否尽量还原之前的页面信息呢?答案很简单,前提是有对应的快照(cache)存在,那么就是需要有套机制能创建快照,以供不 时之需,而已知ob_get_flush()函数是可以将当前PHP输出内容全部拿到的,那么快照内容生成就不成问题了。剩下的就是通过IO来写入快照文 件了。供需要时读取还原之前页面。

哈~理论貌似没问题了,进一步分析细节:

多久更新一次快照(cache)?我想不能太频繁,先定一周( 7 days)时间吧。

依据什么来控制是否更新快照?用当前时间和快照文件修改时间(filemtime)+7Days来比较就好。

快照文件名如何存放以及目录结构?我的页面是启用rewrite的,结构也还明晰,文件名和存放路径就按已当前的网页访问路径URI格式化吧。

如何读取快照?这里肯定不能使用到数据库的,也就是说需要优先WP程序入口来调用。还原文件访问路径,用file_get_contents获取内容就好了。

如果不存在快照如何处理?那就转404的快照页面了,对了,有些页面需要特殊化命名,is_404()、is_home()这些快照文件是应该是需要特殊化命名的。

哈哈,差点忘了,还有主人态下不能生成快照,否则管理员的连接都被看到了。

貌似没有什么太大的问题了。Try it~