【问题标题】:changing http headers after output输出后更改http标头
【发布时间】:2013-08-26 16:12:49
【问题描述】:

我有几个关于标头和输出缓冲的问题。

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

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

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

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

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

【问题讨论】:

    标签: php http-headers output-buffering


    【解决方案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()。

    【讨论】:

      【解决方案2】:
      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控制

      The manual

      假设您的 XAMMP 是您的开发环境,我建议更改它以匹配您的 LIVE VPS 环境。

      【讨论】:

        猜你喜欢
        • 2016-11-19
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 2019-07-06
        相关资源
        最近更新 更多