Mar
3
其实我不是想说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();
我使用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();