我正在学习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文件之外的其他信息。
答案 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中设置标题