【问题标题】:how to pass information from cli or server to fastcgi (php-fpm) and back again?如何将信息从 cli 或服务器传递到 fastcgi (php-fpm) 并再次返回?
【发布时间】: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


    【解决方案1】:

    知道了。

    服务器以网络数据包的形式将信息传递给fastcgi进程。很像 dns 数据包,您必须使用您的语言相应的二进制字符操作函数来制定数据包,包括它的标头和有效负载信息,然后通过管道/网络将其发送到 fastcgi 服务器,然后它将解析二进制数据包成回应。有趣的东西 - 可以有更多的记录,咳咳:-\

    哦,如果你在 php 中创建一个监听器原型,你不能通过任何 php 变量访问这个数据包,你实际上必须读取你正在监听的连接(因为它是一个二进制网络数据包而不是纯文本' post' 发送的数据)。

    我已经设法通过 php 中的原型启动并运行了一个可工作的 fastcgi“服务”。它监听 9999,解析来自 cli 甚至来自 nginx 的二进制 fcgi 请求,它格式化二进制 fcgi 响应,通过网络将其发送回,cli 显示它很好,nginx 甚至将解码的 fcgi 响应返回给浏览器就像大自然一样。

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      相关资源
      最近更新 更多