使用会话的PHP重定向
我创建了一个PHP票务系统。将脚本上载到web时,重定向到第二页时出现以下错误: 警告:无法修改标题信息-标题已由。。。输出从第29行开始 在使用wampserver在本地pc上开发时,我没有出现此错误 票务PHP由两页组成:使用会话的PHP重定向,php,html,session,redirect,Php,Html,Session,Redirect,我创建了一个PHP票务系统。将脚本上载到web时,重定向到第二页时出现以下错误: 警告:无法修改标题信息-标题已由。。。输出从第29行开始 在使用wampserver在本地pc上开发时,我没有出现此错误 票务PHP由两页组成: 第一页:HTML表单,PHP在点击提交后验证输入。如果一切正常==>重定向到第二页 第二页:选择门票 我意识到我得到这个错误是因为我在重定向到另一个页面之前输出了HTML。我如何解决这个问题?(因为我必须输出HTML) 亲切的问候这条消息也让我多次感到沮丧。这个解决方案应
亲切的问候这条消息也让我多次感到沮丧。这个解决方案应该绕过它:
echo '<meta HTTP-EQUIV="REFRESH" content="0; url=newurl.php">';
echo';
其中,content=“0;
中的数字0表示重定向前暂停的秒数
我想不用说,您必须将newurl.php
替换为所需的页面名称…只需说
由于上述情况有其负面影响,尽管我自己使用过,但没有观察到负面结果,以下是一些替代方案:
山姆·杜菲尔(Sam Dufel)的评论中链接的文章令人惊讶:
在调用
header()
或session\u start()
- 确保每个php文件末尾的
之前没有空格 - 在您的开发机器上,将
中的php.ini
更改为error\u reporting
并将eall
更改为display\u errors
,然后再次运行应用程序,查看是否存在任何错误。修复它们On
<?php
// instead of header('Location: someURL.php');
die('<script>window.location = \'someURL.php\';</script>');
?>
否则,在调用
header()
之前,不要输出任何内容。遵循规则并快乐编码=)使用输出缓冲的各种解决方案,但如果您坚持“流程优先”规则(这也意味着所有类型的头和重定向),它将以各种方式对您的代码有益在输出任何内容之前。ob_start()
是您可以使用的拐杖,但对于这一点,它的代码味道不好。简言之:当应用程序尚未完成处理时,不要将其编写为输出HTML,如果您决定输出其他内容(如xml、pdf、json等),会发生什么情况?为什么要在重定向之前输出HTML?听起来您好像在输出内容在会话之前。你能提供你的代码吗?作为旁注,你可能没有在本地服务器上收到警告消息,因为php.ini中显示错误的设置不同。你还应该在生产环境中禁用它。这可能是很多事情。在之前的空格只是修复问题的一种方法。应该解决这个问题实际上已修复(即,在尝试重定向之前不要输出到浏览器)。修复实际问题。不要添加黑客来掩盖问题。黑客是其他人不喜欢的修复。在这种情况下,黑客就是黑客。这一次甚至比正常情况更糟糕,因为通过典型的服务器头没有指示需要重定向,也不能保证浏览器会遵守元刷新。您是qu我对这个问题很感兴趣。考虑到你的SO代表,我相信你有你的理由。虽然很多人继续使用这种方法,但没有负面影响,我期待着你对这个问题的回答。我不打算回答这个问题,因为这真的是一个重复的问题,已经问了很多次了。如果我真的这样做的话答案,我会给出与vooD给出的答案类似的答案,尽管我会特别提到,当错误消息提到“输出从第29行开始”时,它确切地告诉他哪一行代码是Can的违规行