5

基本上,我试图弄清楚如何从“Web 服务器”调用 PHP。

我已经阅读了文档,但并没有太大帮助。

据我所知,调用 PHP 的方法有以下三种:

  • 通过命令行(例如php -f "/path/to/script.php":)
  • 通过 CGI(??) / 通过 FastCGI (???)
  • 通过网络服务器(例如:Apache)模块

所以让我们从CGI开始。也许我只是瞎了眼,但规范没有提到网络服务器在地球上如何将数据(标头和回调)传递给实现 CGI 的东西。FastCGI的情况更糟。

接下来,我们有特定于服务器的模块,我什至不知道要搜索什么,因为所有线索最终都无处可去。

4

2 回答 2

7

调用 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的是由不完整的 HTTP 标头、\r\n\r\n 和页面正文组成的 CGI 响应。

(仅凭记忆。可能还有一些问题。)

于 2011-08-13T00:07:37.860 回答
1

FastCGI 可能是最好的选择,因为它使用得非常明智,它可以让您独立于语言(例如,您可以稍后加入 Ruby),并且很多 示例

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

我根本不会打扰直接 CGI,FastCGI 的存在是有原因的。

于 2011-08-13T00:05:10.083 回答