【发布时间】:2014-01-21 20:07:09
【问题描述】:
我创建了一个 PHP 票务系统。将我的脚本上传到网络时,重定向到第二页时出现以下错误:
警告:无法修改标头信息 - 标头已由...输出从第 29 行开始。
我在本地电脑上使用 wampserver 开发时没有出现此错误。
票务 PHP 由两个页面组成:
- 首页:HTML 表单,PHP 在点击提交后验证输入。如果一切正常 ==> 重定向到第二页。
- 第二页:选择门票。
我意识到我收到此错误是因为我在重定向到另一个页面之前输出了 HTML。我该如何解决这个问题? (因为我必须输出 HTML)
亲切的问候
【问题讨论】:
-
使用输出缓冲的各种解决方案,但是如果您坚持“进程优先”规则(这也是表示各种标题和重定向)在输出任何东西。
ob_start()是您可以使用的拐杖,但为此,它的代码味道很差。简而言之:不要编写您的应用程序在尚未完成处理时输出 HTML,如果您决定要输出其他内容,如 xml、pdf、json 等,会发生什么? -
为什么要在重定向之前输出 HTML?
-
听起来你在会话前输出东西。你能提供你的代码吗?
-
附带说明,由于 php.ini 中的 display_errors 设置不同,您可能没有在本地服务器上收到警告消息。您还应该在生产中禁用它。
-
这可能是很多事情。
<?php之前的空格、选项卡、HTML、一些隐藏字符、cookie、包含文件、字节顺序标记等等等。正如 Wrikken 所写,您可以使用ob_start();作为最后的手段。旁注:最好不要使用结束?>它不需要。