从虚拟/自定义web服务器调用PHP


Call PHP from virtual/custom "web server"

基本上,我想弄清楚如何从"web服务器"调用PHP。

我已经读了文档,但是没有多大帮助。

据我所知,有三种方法调用PHP:
  • 通过命令行(例如:php -f "/path/to/script.php")
  • 通过CGI(??)/通过FastCGI (??)
  • 通过web服务器(例如:Apache)模块

让我们从CGI开始。也许我只是瞎了,但是规范没有提到web服务器是如何传递数据的(headers &回调)来实现CGI。FastCGI的情况更糟。

接下来,我们有特定于服务器的模块,我甚至不知道要搜索什么,因为所有的线索都没有结果。

调用CGI脚本非常简单。PHP有一些特殊之处,但基本上只需要设置一个环境变量列表,然后调用PHP- cgi二进制文件:

setenv GATEWAY_INTERFACE="CGI/1.1"
setenv SCRIPT_FILENAME=/path/to/script.php
setenv QUERY_STRING="id=123&name=title&parm=333"
setenv REQUEST_METHOD="GET"
...
exec /usr/bin/php-cgi

大多数都是样板文件。SCRIPT_FILENAME是将实际的php文件名传递给php解释器的方式,而不是作为exec参数。对于PHP来说至关重要的是非标准变量REDIRECT_STATUS=200

对于GET请求,您只需要环境变量。对于POST请求,只需将HTTP请求体作为stdin管道到执行的php-cgi二进制文件。返回的stdout是CGI响应,由一个不完整的HTTP报头、'r'n'r'n和页面正文组成。

(只是从记忆中。可能还有一些问题

FastCGI可能是最好的选择,因为它是如此明智地使用,它会给你语言独立性(例如,你可以稍后加入Ruby),并且它有很多例子。

如果你真的想的话,你可以编写自己的服务器API,但这比实现FastCGI更棘手,并且有几个缺点。

我不会为直接CGI而烦恼,FastCGI的存在是有原因的。