简单来说, cache(缓存)就是在"高速且昂贵"和"低速且低廉"两种设备之间的联接, 目的是为了解决两者的矛盾. 还有一个词buffer(缓冲), 两者很容易弄混淆.缓冲的目的是解决"将稀疏的数据组合为连续的数据后传送". 比如可以按天领薪水, 也可以把薪水筹到一个月再领(很常见).如果你想了解"使用header()函数之前如果已经有输出了就会出错"的原理, 请找一本http协议的书来看. 简单的说, 服务器向浏览器发送的数据的格式中, header的信息在前面, 由服务器程序一般如Apache等默认发送, 你可以在php中用header()修改, 如果你已经输出了html, 服务器程序必须在html之前输出header信息. 既然已经发送, 你就不能更改了. ob_start()将数据保存在服务器端还未发送, 所以你还可以更改.