PHP如何与Apache接口?

2022-08-30 17:45:23

我几乎已经完成了在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。

如果有人有更多信息,经验或与此相关的某种规范,请告诉我。

提前致谢!


答案 1

从Apache调用PHP有3种方式:

1)作为一个模块 - 这涉及将php解释器与Web服务器发布的钩子库链接起来

2) CGI - Web服务器为每个请求启动一个解释器实例,并通过stdin,命令行和环境变量将参数传递给解释器,stdout被发送到客户端,stderr应该写入error_log

3)fastCGI - 这消除了为每个请求启动新进程的开销 - 解释器作为守护进程运行

CGI是实现起来最简单的,但不能很好地扩展/执行,该模块将是迄今为止最难的。FastCGI几乎与模块方法一样快。CGI 和 fastCGI 是开放的、有据可查的 API。

还有其他方法可以实现您的目标 - 例如栎树

C.


答案 2

简单地说,这就是它的工作原理:

Apache通常通过获取文件并通过HTTP连接发送流来提供文件。但是,使用PHP,Apache会获取文件,将其通过管道传输到PHP二进制文件中,然后通过HTTP连接将命令的输出流发送出去。


推荐