1

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

-当前站点的phpinfo


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

4

3 回答 3

4

据推测,您登录后立即点击的页面会进行重定向。

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

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

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

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

于 2009-04-22T04:49:51.143 回答
1

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

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

php_flag display_errors on
php_value error_reporting 30719

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

于 2009-04-21T18:19:29.503 回答
0

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

于 2009-09-09T05:29:26.770 回答