PHP如何使用header()函数设置HTTP标头?

时间:2016-05-06 14:23:47

标签: php apache http http-headers backend

我正在学习HTTP和网络编程,我很惊讶地发现你可以使用php设置HTTP头。我认为PHP用于生成动态HTML网页和创建应用程序。对我来说,PHP可以设置由Web服务器(例如Apache)发送的标头似乎很奇怪。我知道PHP解释器读取PHP文件并通常以HTML格式生成输出。

此过程是否适用于管道?在我看来,apache服务器必须能够从PHP解释器接收命令,或者它必须能够解释PHP函数本身。我认为它们是独立的过程。

PHP使用什么机制将头设置到Web服务器应用程序(httpd或Apache或其他东西)

所有Web服务器是否都支持通过PHP接收和设置标头?

是否可以使用所有后端语言设置HTTP标头?

我在网站上搜索过,但我没有找到问题的答案。

更具体地说,我想知道apache或其他Web服务器发送到PHP.exe应用程序或PHP-CGI.exe应用程序的命令,以接收除输出的HTML文件之外的其他信息。

3 个答案:

答案 0 :(得分:1)

确实是一个有趣的问题。使用命令行工具,我只能访问生成的HTML输出。因此php -r"header('Location: http://someurl.com');"将不会从命令行生成任何内容。

但是当我用IIS(而不是Apache)查看我的设置时,我发现IIS正在使用PHP-CGI.exe与PHP通信。查看PHP-CGI.exe的可选参数,我看到-b可用于设置Bind Path for external FASTCGI Server mode。我想在这种服务器模式下,将有空间将标题信息与生成的HTML分开。

我不知道FASTCGI协议的确切细节是否更加深入。但我想这就是你想知道的。

修改

当谷歌搜索这个时,我遇到了这个帖子: How does PHP interface with Apache?

答案 1 :(得分:0)

从PHP发送标头非常有用,例如,您可以发送强制浏览器下载文件的标题,而不是在屏幕上显示文件(用于文件脚本,输出CSV的报告),控制缓存标头和执行页面重定向

如其中一条评论中所述,PHP在许多安装中都是Apache的一个模块,它直接通过它发送标头。否则,标题将通过CGI / FastCGI或PHP-FPM发送给nginx。

你或多或少想到的是一个模板引擎,它在PHP上运行良好,但是PHP还有其他通常在模板引擎中看不到的功能,比如打开套接字,处理文件等等。上。

我所遇到的任何后端语言都支持发送HTTP标头,如果没有这种能力,我会认为任何面向Web的后端语言都是不完整的。

答案 2 :(得分:0)

标题('位置:http://www.google.com/');

通过这种方式我们可以在php中设置标题