`
ldl_xz
  • 浏览: 68822 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

PHP Header失效的原因分析

 
阅读更多
在PHP中用header("location:test.php")进行跳转要注意以下几点:
1、location和“:”号间不能有空格,否则会出错。
2、在用header前不能有任何的输出,包括include的页面中标签“?>”后不能有空格!!
3、header后的PHP代码还会被执行。

续:
问题:header函数前输入内容
一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息。如果在header()执行之前有echo等语句,当后面遇到header()时,就会报出 “Warning: Cannot modify header information – headers already sent by ….”错误。就是说在这些函数的前面不能有任何文字、空行、回车等,而且最好在header()函数后加上exit()函数。例如下面的错误写法,在 两个php代码段之间有一个空行:

<?php
//some code here
?>
//这里应该是一个空行
<?php
header(“http/1.1 403 Forbidden”);
exit();
?>
原因:
PHP脚本开始执行 时,它可以同时发送http消息头部(标题)信息和主体信息. http消息头部(来自 header() 或SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print()调用),那么PHP就必须先发送完所有的Header,然后终止 HTTPheader.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

解决办法:
修改php.ini打开缓存(output_buffering),将output_buffering=0修改成output_buffering=4096
或 者在程序中使用缓存函数ob_start(),ob_end_flush() 等。原理是:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTPheader。相反,它将此输出通过管道(pipe) 输入到动态增加的缓存中(只能在PHP4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为 header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

转载自:http://www.9958.pw/post/php_header

分享到:
评论

相关推荐

    PHP Header失效的原因分析及解决方法

    以下是对PHP header()失效的原因分析以及相应的解决方法的详细解释。 ### 失效的原因分析 1. **脚本中存在输出内容** 在PHP脚本中,如果在调用header()函数之前有任何输出,包括echo、print语句或者HTML内容,...

    PHP利用header跳转失效的解决方法

    综上所述,理解`header()`函数的工作原理以及如何解决其跳转失效的问题对于PHP开发者来说至关重要。遵循上述方法,能够有效地排查并修复此类问题,保证代码的正常运行。同时,了解相关HTTP协议和PHP配置知识,也有助...

    php header功能的使用

    `php header`函数是PHP中一个非常重要的函数,它允许开发者向浏览器发送原始HTTP头部信息。HTTP头部信息在客户端和服务器之间传输时起到控制请求和响应的重要作用。本篇文章将详细解析`header`函数的使用及其相关...

    用header 发送cookie的php代码

    `header()`函数是PHP中用来发送HTTP头信息的关键函数,它允许我们向浏览器发送各种类型的数据,包括设置Cookie。下面我们将详细讨论如何使用`header()`函数发送Cookie以及相关的知识点。 首先,让我们来看一下提供...

    PHP Header用于页面跳转时的几个注意事项

    在PHP脚本执行过程中,任何在header()之前已经输出的内容都会导致header()函数失败。这意味着包括HTML标签、空格、换行符等在内的任何输出都将阻止header()函数正常工作。例如,以下代码将会导致错误: ```php ...

    Php header()函数语法及使用代码

    PHP中的header()函数主要用于在实际输出到浏览器之前向客户端发送HTTP报头。这个函数非常关键,尤其是在进行页面跳转或设置特定的HTTP响应状态码时。header()函数的基本语法是: ```php void header(string $string...

    PHP Header用于页面跳转要注意的几个问题总结

    在使用header函数进行页面跳转时,需要确保遵循上述的规则和注意事项,以免遇到重定向失败或导致其他脚本错误的问题。正确地运用header函数可以帮助开发者在Web开发中实现流畅的用户体验和合理的页面导航。

    php实现JWT(json web token)鉴权实例详解

    JWT由三个部分组成:header.payload.signature 以下示例以JWT官网为例 header部分: { alg: HS256, typ: JWT } 对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 说明:该字段为jso

    PHP通过header实现文本文件下载的代码

    在PHP中,通过header函数实现文本文件的下载是一种常见的技术手段。当用户点击一个文本文件的链接时,通常浏览器会尝试直接打开文件,但通过设置HTTP头部信息,我们可以强制浏览器弹出下载对话框,让用户选择保存...

    浅析php header 跳转

    本文将集中分析PHP中服务器端的跳转机制,特别是通过header函数实现的页面跳转。 首先,我们需要了解HTML代码中的页面跳转方式。在HTML中,页面跳转通常通过`&lt;meta&gt;`标签实现,它能够指定页面在加载后一段时间自动...

    分享PHP header函数使用教程

    需要注意的是,在使用header函数之前,必须确保没有任何输出(包括空格、换行符等)已经发送给浏览器,否则会导致header函数调用失败,并出现“headers already sent”错误。此外,header函数发送的头部信息应该与...

    php header示例代码(推荐)

    PHP中的header()函数是一个非常重要的函数,它主要用于在发送实际的输出内容给浏览器...如果header()函数未能正常工作,务必检查是否在输出内容前调用header(),或者是否有其他地方输出了内容导致header()发送失败。

    找不到php_mbstring.dll或php_exif.dll的解决方法

    1. **动态库加载失败**:PHP在启动时尝试加载指定路径下的dll文件(例如 `php_exif.dll`、`php_mbstring.dll` 或 `libmcrypt.dll`),但未能成功。 2. **路径问题**:错误消息中提到的路径可能存在问题,如文件不...

    php学习心得 php初学者 php

    有时候 SQL 语句不起作用,对数据库操作失败。最简便的调试方法是,echo 那句 SQL,看看变量的值能得到不。 11. include 和 require 的区别 include 和 require 都可以用来包含文件,但是它们etween 的区别是,...

    nginx与php分别部署在不同的主机上配置方法

    这是一个常见的错误,如果你将其指定为 Nginx 主机上的目录,可能会导致配置失败。 在 nginx.conf 文件中,我们需要添加以下配置项: ``` http { ... upstream php { server 192.168.1.135:9000; } ... ...

    ajax上传图片,PHP上传图片,PHP上传图片跨域,跨域上传图片,上传图片缩览图

    echo "上传失败。"; } } else { echo "只允许上传jpg/png文件。"; } } ?&gt; ``` 在处理跨域上传图片时,我们需要考虑CORS(Cross-Origin Resource Sharing)策略。由于浏览器的安全限制,不同源的请求会被阻止,...

Global site tag (gtag.js) - Google Analytics