1

我有一些关于标头和输出缓冲的问题。

我知道标头必须在输出之前发送,否则它们将不起作用,并且输出缓冲将所有 HTML 存储到缓冲区中并将其作为一个发送,而不是 PHP 进程一次发送位。

那么这是否意味着当输出缓冲打开时,所有内容都被收集到一个变量中,并且在脚本中定义的标题中它们将被放置在顶部/第一个?

如果输出缓冲关闭,您必须在任何输出之前声明标题?

并且还要使用任何输出缓冲功能,例如ob_clean()您需要打开输出缓冲?好像输出缓冲已关闭,您无法清理、“收回”任何已经发送的内容?

最后是在 php.ini 中打开/关闭输出缓冲吗?因为我的 XAMPP 本地主机服务器似乎打开了输出缓冲而我的 VPS 没有,这意味着我需要转到我的 VPS php.ini?

4

2 回答 2

1

那么这是否意味着当输出缓冲打开时,所有内容都被收集到一个变量中,并且在脚本中定义的标题中,它们将被放置在顶部/第一个?

最喜欢这样。没有包含内容的“PHP 变量”,但您可以使用 ob_*() 函数访问它。例如,ob_get_contents() 获取缓冲的内容,ob_clean() 擦除它,等等。

在发送第一个内容之前发送标头。事实上,您可以使用 header() 函数的替换(第二个参数)覆盖先前指定的标题。

如果输出缓冲关闭,您必须在任何输出之前声明标题?

是的,否则您会收到“警告:无法修改标头信息 - 标头已发送...”。

并且还要使用任何输出缓冲函数,例如 ob_clean() 你需要输出缓冲吗?

不,但您需要调用 ob_start() 来启动缓冲过程。

最后是在 php.ini 中打开/关闭输出缓冲吗?

检查 output_buffering 指令。

意思是我需要去我的 VPS php.ini?

输出缓冲功能是可配置的 PHP_INI_PERDIR。您可以使用 .htaccess 文件,也可以在脚本开头添加 ob_start() 。

于 2013-08-26T16:29:40.557 回答
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 环境。

于 2013-08-26T16:27:22.757 回答