提问人:Waleed Amjad 提问时间:5/5/2010 更新时间:5/5/2010 访问量:15920
PHP如何与Apache交互?
How does PHP interface with Apache?
问:
我几乎已经完成了在 Java 下编写一个兼容 HTTP/1.0 的 Web 服务器(没有商业用途,这只是为了好玩),基本上我想包括 PHP 支持。我意识到这根本不是一件容易的事,但我认为这将是一个不错的成就。
所以我想知道PHP是如何与Apache Web服务器(或任何其他Web服务器)对接的,这样我就可以从中学习并编写我自己的PHP包装器。它不一定是mod_php的,我不介意编写一个 FastCGI 包装器——据我所知,它也能够运行 PHP。
我本来以为PHP需要的只是进入客户端的输出(因此它可以解释PHP部分),来自客户端的完整HTTP请求(因此它可以提取POST变量等)以及客户端的主机名。然后,您只需将解析的PHP代码写入输出流即可。可能会有更多的东西,但从本质上讲,这就是我所认为的。
从我目前收集到的信息来看,apache2handler 提供了一个 API,PHP 利用它来“连接”到 Apache。我想查看apache2handler和php5apache2.dll之类的源代码是一个想法,但在我这样做之前,我想我会先问SO。
如果有人有更多与此相关的信息、经验或某种规范,请告诉我。
提前致谢!
答:
简单地说,它是这样工作的:
Apache 通常通过获取文件并通过 HTTP 连接向下发送流来提供文件。但是,对于 PHP,Apache 会获取文件,将其通过管道传输到 PHP 二进制文件中,然后通过 HTTP 连接将命令的输出流发送到 HTTP 连接。
评论
除了 php 文件、HTTP 请求和客户端主机名之外,还有一些其他信息项通常传递给 PHP,以设置 $_SERVER
超全局的某些其他元素。链接的文档页面包含通常设置的内容列表。
评论
关键词是 。
这是一个非常简单的协议,可以长期为网络服务器服务。
它不是PHP与Web服务器交互的唯一方式,但最常见且最容易实现。CGI
简而言之,您的服务器必须设置一些环境变量,然后调用一个 cgi-script,它本身就是一个 php 脚本。
有 3 种方法可以从 Apache 调用 PHP:
1) 作为一个模块 - 这涉及将 PHP 解释器链接到 Web 服务器发布的钩子库
2) CGI - Web 服务器为每个请求启动一个解释器实例,并通过 stdin、命令行和环境变量将参数传递给解释器,stdout 发送到客户端,stderr 应写入error_log
3) fastCGI - 这消除了为每个请求启动新进程的开销 - 解释器作为守护程序运行
CGI 是最容易实现的,但不能很好地扩展/执行,该模块将是迄今为止最难的。FastCGI几乎与模块方法一样快。CGI 和 fastCGI 是开放的、有据可查的 API。
还有其他方法可以实现您的目标 - 例如栎树
C.
评论