Mar 3

php的Ob_start 不指定

bkkkd , 00:12 , 开发应用 , 评论(0) , 引用(0) , 阅读(2349) , Via 本站原创 | |
其实我不是想说ob_start,而是解决一个nginx的proxy_cache问题。

我使用proxy_cache对根据页面头信息里的有效期和状态页面进行缓存。这个的性能还是很不多。交给php进行控制,而且不需要每个页面都创建。只是第一次访问时才生成缓存。

在长期的运行下,发现一个问题,如果程序在出现超时后,没有返回非200的状态(如500).还是返回200。这样就问题大了。本来proxy_cache就是靠状态来判断,在出错后还是返回200这样我如何是好呢?所以我就想到使用ob_start()进行缓存。但实际上这个是没有作用。

ob_start只是开通缓存的通道。如果出错问题,他还是会返回通道的内容数据,所以不会有影响,只是非正常退出,不返回数据而已。

另外ob_start开启的缓存通道可以多个开通。

所以ob_start不能解决状态问题。最后使用set_error_handler(),设置一个出错回显的函数。直接在函数中针对出错的函数。输出500的头信息。

好了这个就可以解决问题了。

那ob_start还要不要用?我想还是用吧。出错后就不要输出页面的内容了。因为内容未处理完。不如不输出。

<?php
ob_start()
set_error_handler('my_error_handler');

function my_error_handler($errno, $errmsg, $filename, $linenum, $vars){
    header('HTTP/1.1 500 Internal Server Error');
}
$smarty = new Smarty();
$smarty->display();
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]