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

Chr*_*ian 5 php webserver cgi fastcgi mod-php

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

我已经阅读了文档,但它没有多大帮助.

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

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

那么让我们从CGI开始吧.也许我只是盲目,但规范没有提到地球上的Web服务器如何将数据(标题和回调)传递给实现CGI的东西.FastCGI的情况更糟.

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

mar*_*rio 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
Run Code Online (Sandbox Code Playgroud)

其中大多数是样板.SCRIPT_FILENAME是如何将实际的php文件名传递给PHP解释器,而不是exec参数.PHP的关键也是非标准变量REDIRECT_STATUS=200.

对于GET请求,您只需要环境变量.对于POST请求,您只需将HTTP请求正文stdin传递给已执行的php-cgi二进制文件.返回的stdout是CGI响应,包含一个不完整的HTTP头,\ r \n\r \n和页面正文.

(仅仅是记忆.可能还有一些陷阱.)