我有一个我无法用我正在处理的应用程序解释的暴力行为。在应用程序的引导程序中,我做了类似的事情:
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!");
}
例如,如果我自己停止数据库,应用程序将暂停并打印the app is dead!
。很公平,这应该是它应该做的。
问题是,当我重新启动数据库时,会出现奇怪的行为:基本上浏览器会显示应用程序的工作页面(主页,登录页面等),但是当按下f5来引用页面时,错误页面有时仍会以非常间歇方式显示(第1个f5:显示,第2个f5:我得到正常页面,第3个f5:它再次显示等等。)
当数据库无法正常工作时,这显然是页面的缓存版本,但我无法理解为什么浏览器正在缓存,因为我告诉它不要(请参阅所有header()
)。
答案 0 :(得分:0)
在您的代码无法正常处理的情况下,会抛出一些其他异常。检查try
块中的每个调用,阅读其中的文档并确保处理它可能抛出的异常。
一般情况下,一个大的try
块,只有一个except
块的不同子系统的一堆调用,假设只有一个故障模式是个坏主意。尝试使用多个except
块,每个块捕获不同的异常,并使最后的通用处理程序包含在其输出中捕获的实际异常(如果您不这样做,则在HTML中作为注释)想要警告用户。)