Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送标题后的PHP重定向?_Php_Javascript_Html - Fatal编程技术网

发送标题后的PHP重定向?

发送标题后的PHP重定向?,php,javascript,html,Php,Javascript,Html,我有一个函数,需要重定向页面,如果一个变量设置等 问题是,这个函数位于php页面的底部 这意味着,我已经输出了很多信息,所以我得到了一个警告 “警告-标头已由…发送” 发送头后是否有重定向的方法 谢谢你应该做的是把ob\u start()放在页面的最开始,把ob\u flush()放在页面的最末尾。这样,您就不会遇到已发送的邮件头错误 请参阅以获取进一步的参考。有一些方法,但它们基本上都是解决办法: 最简单的是元http equiv: <meta http-equiv="Refresh"

我有一个函数,需要重定向页面,如果一个变量设置等

问题是,这个函数位于php页面的底部

这意味着,我已经输出了很多信息,所以我得到了一个警告

“警告-标头已由…发送”

发送头后是否有重定向的方法


谢谢

你应该做的是把
ob\u start()
放在页面的最开始,把
ob\u flush()
放在页面的最末尾。这样,您就不会遇到已发送的邮件头错误


请参阅以获取进一步的参考。

有一些方法,但它们基本上都是解决办法:

最简单的是
元http equiv

<meta http-equiv="Refresh" content="0;http://www.example.com/newlocation">

  • 当它位于
    元素之外,并进入怪癖模式时,某些浏览器会不喜欢它
或者,您可以尝试JavaScript重定向:

<script>
    window.location = 'http://www.example.com/newlocation';
</script>

window.location=http://www.example.com/newlocation';
  • 如果没有JavaScript,这显然是行不通的

ob_flush()
结尾是隐式的,可以省略。这样做的好处是,如果在应用程序的控制流中的某个位置添加
ob\u flush()
之后的输出内容,而该函数调用不可见,那么几个月后您不会意外地再次遇到此问题。这是最干净的解决方案;请注意,这是通过缓冲页眉和内容并仅在页面末尾将它们一起发送来实现的。而且,这并不取决于输出的大小和该页面的访问次数,它确实会由于将所有字符串存储到内存中而降低页面的速度。它还使渐进式渲染变得不可能。但我们都在使用的gzip也是如此,对吗?对吗?布勒?@Epileless:你可以试着到处冲洗缓冲液。比如在HTML头之后。如果数据量不够,大多数浏览器不会呈现任何内容,所以。。。是的。:)
http equiv
头必须在文档的前几百个字节内,否则浏览器将不会将其视为http头。@有趣的是,我不知道这一点。[需要引证]?@Piskvor,这可能只是一个遗产。我挖东西有困难。但我确实记得,在那一天,Microsoft文档特别警告开发人员将HTTP等效元标记放在前N个字节中,否则它们将不会被视为头。我会使用jscript重定向,或者更好的做法是进行干净的重构,以便在所有业务逻辑处理每个数据和所有数据之后生成输出做出决策,以便在任何输出之前,您可以执行重定向,或者如果由于数据处理时间过长而需要执行某些输出,我们可以重构它,使eny所需的计算在任何输出完成之前就准备好了。如果微软这样说,那么它可能只适用于IE,如果他们很久以前这样说,它仍然应该是相关的,因为在IE开发团队中,对W3C标准的改变不知何故进展非常缓慢>这不是一个安全问题问题。您在
标题()之前执行
打印()
,或者您混合了
标记。