PHP 如何设置 header

在网站开发中,有时候会遇到这样的场景:明明写好了一个页面,打开后却自动跳转到另一个页面,或者浏览器提示“内容类型不匹配”,甚至下载了错误的文件。这些看似“诡异”的情况,很多时候都和PHP里的header设置有关。简单来说,header就像网站和浏览器之间的“提前沟通纸条”,告诉浏览器接下来要怎么处理这个页面,只要用对了,就能避免很多莫名的问题。

什么是header设置?

header是PHP里用来发送HTTP协议头信息的函数,相当于你去餐厅吃饭前,提前告诉服务员“我要坐靠窗的位置,不要辣的菜”。浏览器收到这些信息后,就会按照你的要求来“做事”,比如知道这是个网页、要跳转到新地址、或者是要下载的文件。不过要注意,header得在页面输出任何内容之前用,哪怕是一个空格、一句echo的文字,都会让它失效,这就好比你递纸条晚了,服务员已经开始上菜了,就没法改要求了。

PHP 如何设置 header

最常用的header设置:页面跳转

跳转是最实用的场景,比如用户登录后,要自动跳转到个人中心,或者旧页面不用了,要把访问的人引导到新地址。这时候就用header里的跳转功能,举个生活化的例子:你在小区门口贴了旧快递点的地址,后来快递点搬了,你得在旧地址旁边写“新地址在小区西门”,这就是告诉来的人换地方了。

PHP里的写法很简单,比如登录成功后跳转:

`php

// 登录验证通过后,跳转到个人中心页面

header("Location: https://你的网站.com/user/center");

// 一定要加exit,不然页面可能还会继续执行后面的代码

exit;

`

这里要注意,跳转地址不能写相对路径吗?其实也可以,但建议用完整网址,避免浏览器识别出错;还有,必须加exit,不然PHP可能会继续输出其他内容,导致跳转失败。

另一个常用场景:设置内容类型

有时候你打开一个页面,浏览器却当成下载文件,或者显示乱码,这就是内容类型没设置对。就像你给朋友发消息,不说清楚是文字还是图片,朋友就可能理解错。PHP里用Content-Type来告诉浏览器内容类型,最常用的就是网页格式和中文编码。

比如要让浏览器识别成普通网页,且不会乱码,写法是:

`php

header("Content-Type: text/html; charset=utf-8");

`

如果是要生成一张图片,就把类型改成image/png,这样浏览器就会直接显示图片,而不是乱码;如果是要下载一个Excel文件,就可以这么写:

`php

header("Content-Type: application/vnd.ms-excel");

header("Content-Disposition: attachment; filename='销售数据.xls'");

`

这样用户打开页面,就会自动弹出下载窗口,而不是直接在浏览器里打开。

容易踩的坑要注意

很多新手会遇到header失效的问题,多半是踩了这两个坑:一是用之前输出了内容,比如在header前面写了一句echo "测试";,或者在PHP标签外面多打了一个空格,哪怕是文件最后一行的空格,都会导致header发不出去;二是设置了多个header,但是前面的错误设置覆盖了后面的,比如先写了Content-Type: image/jpeg,又写了Content-Type: text/html,最后只会按最后一个来执行。

只要记住这些要点,就能用header解决大部分网站的小问题,不用再对着浏览器的奇怪提示发愁。

上一篇 TypeScript 如何做类型合并