【发布时间】:2012-08-31 23:26:17
【问题描述】:
我正在尝试编写一个网络服务器。我不想为 php 编写模块,所以我想我会像 nginx 和 apache 一样将信息传递给 php-fpm。我做了一些研究,并设置了原型,但无法让它工作。
我已经在端口 9999 上设置了一个 php 服务,该服务将在每次连接时打印_r($GLOBALS)。我已经设置 nginx 将 php 请求传递给 127.0.0.1:9999。请求正在传递,但只有 argc (1) 和 argv(php 服务的路径)和 $_SERVER 变量被填充。 $_SERVER 变量有很多关于 php 进程正在运行的当前环境的信息,但我没有看到任何关于连接用户或他们的请求的信息 - 没有 REMOTE_ADDR,没有 QUERY_STRING,什么都没有......
我很难找到有关如何将这些信息从 cli 或原型服务器传递到 fastcgi php 进程的文档。我找到了一些旧 CGI 变量的列表,但没有关于如何传递它们的信息,或者它们中的任何一个是否已经过时使用 fastcgi。
所以,我再次询问您如何将信息从服务器原型或 cli 传递到 php-fpm 或 fastcgi 进程 - 或者,我在哪里可以找到关于此主题的适当、清晰和明确的文档? (不,RFC 不是答案)。我已经阅读了 fastcgi.com 和 wikipedia 以及许多其他搜索结果...
=== 更新 ===
我已经设法通过 php 中的原型启动并运行一个工作的 fastcgi“服务”。它监听 9999,解析来自 cli 甚至来自 nginx 的二进制 fcgi 请求,它格式化二进制 fcgi 响应,通过网络将其发送回,cli 显示它很好,nginx 甚至将解码的 fcgi 响应返回给浏览器就像大自然一样。
现在,当我尝试以另一种方式做事时——编写我的原型服务器,该服务器形成一个二进制 fcgi 数据包并将其发送到 PHP-FPM,我什么也没得到——在 cli 上或从错误日志中没有错误输出(我永远无法让 php-fpm 以任何方式写入错误日志 [-_-])。那么,为什么 php-fpm 不给我某种响应,无论是错误文本,还是二进制网络数据包,或者任何东西???
所以,我可以将数据从 cli 发送到 fastcgi,但我无法取回任何东西,除非它是我自己的 fastcgi 进程(不,我没有接管 php-fpm 的端口 - 我在9999 和 9000)。
=============
TIA \m/(>_
【问题讨论】:
标签: api webserver cgi fastcgi php