我有一个无法用我正在开发的应用程序解释的掉队行为。在应用程序的引导程序中,我会做这样的事情:
try {
// db connection and 3rd party services availability checks
} catch (Exception $ex) {
// here I will put all sorts of headers meant to disable caching on the client
header("Content-Type: application/json");
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
die("the app is dead!");
}
例如,如果我自己停止DB,应用程序将停止并打印the app is dead!
。公平地说,这就是它应该做的。
问题是,当我重新启动DB时,会出现奇怪的行为:基本上浏览器会显示应用程序的工作页面(主页、登录页面等),但当点击f5引用页面时,错误页面有时仍会以非常的间歇性方式显示(第一个f5:显示,第二个f5:我得到正常页面,第三个f5,再次显示等)。
这显然是DB不工作时页面的缓存版本,但我不明白浏览器为什么要缓存,因为我告诉它不要缓存(请参阅所有header()
)。
在您的代码无法正常处理的情况下,还会引发其他一些异常。检查try
块中的每个调用,阅读有关它的文档,并确保您正在处理它可能引发的异常。
通常,一个大的try
块带有对不同子系统的一堆调用,而只有一个except
块假设只有一种故障模式,这是一个坏主意。尝试使用多个except
块,每个块捕获不同的异常,并使末尾的通用处理程序包括在其输出中捕获的实际异常(如果您不想警告用户,则作为HTML中的注释)。