【问题标题】:Problem with output_buffering and php.inioutput_buffering 和 php.ini 的问题
【发布时间】:2009-04-21 18:13:27
【问题描述】:

当试图在这个site (user:polopolo,pass:samara) 登录时,结果是一个空白页。我知道问题在于 php.ini 文件中的标头和 ouput_buffering 的发送。我在另一台主机上遇到了同样的问题,但是当我更改 output_buffering= On 后问题就解决了。它在当前主机上不起作用,我想知道为什么?有什么建议?

-当前站点的phpinfo


编辑: 问题解决了。我对代码进行了逆向工程,并在发送标头之前的 php 结束标记之后发现了一些额外的空格。代码不是我写的,我本能地忽略了这个选项,因为整个系统已经在另一台服务器上运行。但我的同事做了一些我不知道的改变……吸取的教训:团队合作很重要,不要让任何人替你思考。对我来说仍然是一个谜,在尝试一切都显示错误之后,尤其是“无法修改标题”,它们没有正确显示。我做了你建议我做的一切——显示错误,记录它们等等......无论如何,谢谢。

【问题讨论】:

    标签: php output-buffering


    【解决方案1】:

    大概是您登录后立即点击的页面进行了重定向。

    进行重定向需要在响应中输出 HTTP 标头。问题是,如果 PHP 已经开始输出文档的 body,那么它就不能输出标题,因为它们的标题在正文开始时就结束了。

    输出缓冲阻止 PHP 输出文档的任何部分body,直到输出缓冲区被刷新(或 PHP 退出)。这允许您随时输出标题。

    现在,如果打开输出缓冲解决了自己站点/服务器上的问题,但没有解决另一个问题,这清楚地表明它实际上不是同一个问题 - 您遇到了不同的问题。

    您应该记录 PHP 错误,因此请检查您的 PHP 错误日志。如果(且仅当)您在受限制的仅限开发人员的站点(您不是)上查看此内容,您可以在 PHP 配置中打开 display_errors,这将在页面呈现时显示错误。在可公开访问的服务器上,这通常被认为是不安全的设置,因为攻击者可能会尝试并导致错误消息泄露一些私人信息。

    【讨论】:

      【解决方案2】:

      我不是专家,我无法理解输出缓冲与任何东西有什么关系,也许代码中有一些错误?

      您能否创建一个包含以下内容的 .htaccess 文件:

      php_flag display_errors on
      php_value error_reporting 30719
      

      把它放在那个站点的根目录下,然后重新登录试试看有没有输出错误?

      【讨论】:

      • 试过了。没有错误发生。我不认为它应该是错误的,并且用我不理解的蹩脚标题来错误地处理它。虽然
      • 对不起,我无法提供更多帮助,但您可以再试一次,但不要使用 7,而是使用 30719 并在完成后在此处发表评论,如果您不介意我可以测试它?跨度>
      • 我不认为更改已经到位,因为查看 phpinfo() 没有显示假定的值(display_errors 为“On”;error_reporting 为“30719”)
      • 尝试在您的 php.ini 文件中而不是在 .htaccess 文件中进行设置。您可能会发现这些设置已经在该文件中,您只需要更改它们。但也要注意我的警告,在公共可用的服务器上公开错误消息通常是不安全的 - 最好在只有您有权访问的测试服务器上进行诊断。
      【解决方案3】:

      我在做一个项目时也遇到了同样的问题。我稍后通过设置修复它 output_buffering = 4096 在 php.ini 配置文件中,它在 localhost 中运行良好,但是当我将它放在主机服务器上时,我再次收到此错误。我不确定如何在主机服务器上使用我自己的 php.ini 配置文件。欢迎任何建议...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        相关资源
        最近更新 更多