假设在Php代码中多次调用了 ob_start()而ob_end_flush()调用的次数比ob_start()少2次,那么这段代码可能不能正常工作。
因为 ob_start()的buffer是stackable的。调用多次ob_start()后,ob_flush()只会把buffer输出到上一层的 buffer中。
例如
调用ob_start(),它的缓存区为 buffer1,再次调用ob_start(),它的缓存区为buffer2。
这时调用ob_flush()只会把 buffer2中的内容输出到 buffer1。
这时如果调用 ob_end_flush(), 那么buffer2中的内容会被输出到 buffer1并且销毁buffer2。
此时再调用ob_flush()就会把buffer1中的内容输出到服务器,然后调用flush()则可以把服务 器中的buffer输出到客户端浏览器。
知道了ob_start()和ob_end_flush()的用法后,就可以用下面的代码来实现所有页面内容完全生成后一次性输出所有的缓存。
发表评论: