【问题标题】:How does PHP interact with HTTP servers? (like lighttpd) [duplicate]PHP 如何与 HTTP 服务器交互? (如 lighttpd)[重复]
【发布时间】:2012-12-13 06:53:53
【问题描述】:

可能重复:
I never really understood: what is CGI?

在 lighttpd config 中,我们定义了两条路径(如下图),一条是 PHP 的二进制文件,一条是 socket 路径。我的问题是,lighttpd 会在哪一点获取 PHP 创建的最终 HTML 输出?二进制文件是否将输出作为响应提供给 lighttpd?或者它是否在另一个地方创建一个临时文件并且服务器获取它?

fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))

【问题讨论】:

  • 管道通常(见CGI)。但由于此配置指定了一个套接字,因此您可能正在使用 FastCGI 二进制文件。
  • 不是重复的;配置 sn-p 是关于 FastCGI,而不是 CGI。 bin-path 意味着 lighty 将生成后端(与外部生成相反),套接字是“unix 套接字”(不是命名管道,真正的套接字)的路径。 lighty 将为每个请求连接到这个套接字,就像浏览器连接到网络服务器一样 - 但它使用不同的协议来获取详细信息。
  • 请您删除“重复”语句,因为这个问题不是重复的。

标签: php lighttpd


【解决方案1】:

PHP 可以作为 CGI 二进制文件或 Apache 模块运行。当用作 CGI 二进制文件时,HTTP 服务器将通过 pipesnamed pipes 与 PHP 通信。这些可以利用stdout,这是一种不需要任何磁盘访问的进程间通信形式。如果作为 Apache 模块运行,PHP 实际上是 Apache 服务器的一部分。这比作为 CGI 执行要快得多,但有一些安全限制。

【讨论】:

    【解决方案2】:

    据我了解,bin-path 用于启动 FastCGI 服务器(如果尚未启动),而 socket 用于在启动后将请求代理到服务器。

    因此,在处理请求后,最终的 HTML 将从 /tmp/php.socket 中提取;它是一个命名管道,而不是网络套接字,但它们在任何其他方面都非常相似。

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2013-11-28
      • 1970-01-01
      • 2020-12-15
      • 2011-08-10
      • 1970-01-01
      • 2012-09-15
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多