从虚拟/自定义调用PHP;网络服务器;

从虚拟/自定义调用PHP;网络服务器;,php,cgi,webserver,fastcgi,mod-php,Php,Cgi,Webserver,Fastcgi,Mod Php,基本上,我试图弄清楚如何从“web服务器”调用PHP 我已经阅读了文档,但没有多大帮助 据我所知,调用PHP有三种方法: 通过命令行(例如:php-f”/path/to/script.php“) 通过CGI(??)/通过FastCGI(??) 通过web服务器(例如:Apache)模块 那么,让我们从以下几点开始。也许我只是瞎了眼,但是规范没有提到web服务器到底是如何将数据(头和回调)传递给实现CGI的东西的。情况更糟的是,有了它 接下来,我们有特定于服务器的模块,我甚至不知道要搜索什么,

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

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

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

  • 通过命令行(例如:
    php-f”/path/to/script.php“
  • 通过CGI(??)/通过FastCGI(??)
  • 通过web服务器(例如:Apache)模块
那么,让我们从以下几点开始。也许我只是瞎了眼,但是规范没有提到web服务器到底是如何将数据(头和回调)传递给实现CGI的东西的。情况更糟的是,有了它


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

FastCGI可能是最好的选择,因为它使用得非常明智,它会让您获得语言独立性(例如,您可以稍后访问Ruby),而且它也很有用

如果您真的愿意,您可以自己编写,但这比实现FastCGI要复杂得多,并且有几个缺点


我一点也不担心直接的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\u FILENAME
是将实际的php文件名传递给php解释器的方式,而不是作为exec参数。非标准变量
REDIRECT\u STATUS=200
对PHP也至关重要

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


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

您考虑过阅读代码吗?你的问题中的所有这些东西都是开源的。@Dan我现在正试图这么做。但事实证明这很困难,原因有几个:(1)我找不到所有的代码(2)代码是c/c++(3)代码非常陈旧和/或凌乱。@Dan说是谁??如果我愿意的话,我可以用汇编程序或ADA(或FPC,我正计划这么做)。对着风大喊大叫对你没有帮助。这是一个用PHP编写的CGI模块,可能比典型的指南更容易理解:-不要为FastCGI操心,不值得这么做(PHP不支持更简单的SCGI。)好的,web服务器如何处理PHP可执行文件?本地(环回)连接?@它可能位于不同的主机上(任意TCP/IP连接)或unix管道的另一端。一定要阅读我链接的规范,它写得很清楚。我会在几个小时的睡眠后好好看一看。现在已经是凌晨2:30了:/I我遇到了这个问题,然后您需要显式地填充
PATH\u INFO
SCRIPT\u PATH
变量。请查看详细信息