我有一些关于标题和输出缓冲的问题。
我知道标题必须在输出之前发送,否则它们将无法工作,并且输出缓冲将所有HTML存储到缓冲区并将其作为一个发送,而不是PHP处理一次发送位。
这是否意味着当输出缓冲打开时,所有内容都被收集到一个变量中,哪些标题在脚本中定义,它们将被放置在顶部/第一个?
如果输出缓冲关闭,你必须在任何输出之前声明标题吗?
并且还要使用任何输出缓冲功能,例如ob_clean()
,你需要输出缓冲吗?好像输出缓冲已关闭,你无法清理,“收回”,任何已发送的东西?
最后是在php.ini中打开/关闭输出缓冲?因为我的XAMPP本地主机服务器似乎有输出缓冲而我的VPS没有,这意味着我需要转到我的VPS php.ini?
答案 0 :(得分:1)
So does this mean when output buffering is on, all content is collected into
one variable and where ever the headers were defined in the script they will be
placed at the top/first?
不完全,无论缓冲状态如何都会发送标头,所有其他echo & print
都会被缓冲,直到您释放它们为止。
And if output buffering is off you have to declare headers before any output?
是的,这是正确的。
输出缓冲的自动状态由PHP.INI
假设您的XAMMP是您的开发环境,我建议您更改它以匹配您的LIVE VPS环境。
答案 1 :(得分:1)
这是否意味着当输出缓冲打开时,所有内容都被收集到一个变量中,哪些标题在脚本中定义,它们将被放置在顶部/第一个?
最喜欢那样。没有包含内容的“PHP变量”,但您可以使用ob _ *()函数访问它。例如,ob_get_contents()获取缓冲内容,ob_clean()删除它,等等。
在发送第一个内容之前发送标头。实际上,您可以使用header()函数的replace(第二个参数)覆盖以前指定的标头。
如果输出缓冲关闭,你必须在任何输出之前声明标题吗?
是的,否则你会收到“警告:无法修改标题信息 - 标题已经发送......”。
并且还要使用任何输出缓冲功能,例如ob_clean(),你需要输出缓冲吗?
不,但你需要调用ob_start()来启动缓冲过程。
最后是在php.ini中打开/关闭输出缓冲?
检查output_buffering指令。
意思是我需要转到我的VPS php.ini?
输出缓冲功能是可配置的PHP_INI_PERDIR。您可以使用.htaccess文件,也可以在脚本的开头添加ob_start()。