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


How does PHP set HTTP headers with the header() function?

我正在学习HTTP和web编程,我惊讶地发现你可以使用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文件之外的其他信息。

确实是一个有趣的问题。使用命令行工具,我只能访问生成的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协议的确切细节。但我想这就是你想知道的。

编辑:

当我在谷歌上搜索这件事时,我发现了这样一条线索:PHP如何与Apache接口?

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

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

你或多或少想到的是一个模板引擎,PHP在这方面做得很好,但PHP还有其他在模板引擎中通常看不到的功能,比如打开套接字、处理文件等等

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

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

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