【问题标题】:What are the differences between mod_php and cgi php script?mod_php 和 cgi php 脚本有什么区别?
【发布时间】:2011-02-14 19:00:37
【问题描述】:

mod_php 和 cgi php 脚本有什么区别?

我的意思是,为什么最好(是吗?)使用 mod_php 而不是简单的 php 脚本,将它们作为 CGI 运行?

谢谢

【问题讨论】:

  • 您也可以使用 FastCGI 运行 PHP,这消除了 CGI 的大部分开销,并允许您运行线程 apache MPM(PHP 往往不喜欢线程 MPM)
  • @Reece45, MPM?͏͏͏͏͏͏͏͏͏͏
  • @Pacerier 它是一个特定于 apache 的模块(多处理模块),它实现了一次处理多个请求的不同方法。有关详细信息,请参阅httpd.apache.org/docs/2.4/mpm.html
  • @Reece45,你用那个吗?

标签: php cgi webserver


【解决方案1】:

当使用 CGI 时:一个 PHP 进程由 Apache 启动,它是解释 PHP 代码的 PHP 进程——而不是 Apache 本身

理论上,必须为每个请求创建一个不同的 PHP 进程——这会使事情变慢:Apache 需要做更多的工作来响应请求。
(嗯,正如 @AlReece45 在评论中指出的那样,使用 FastCGI 可以做得更好)


当使用 PHP 作为 Apache 模块 (mod_php, or mod_php5) 时,PHP 解释器在 Apache 进程中是一种“嵌入”:没有外部PHP进程。

这意味着:

  • 无需分叉来回答请求(更快)
  • Apache 和 PHP 之间更好的通信


一般来说,我会说mod_php是使用最多的解决方案。

【讨论】:

  • 进入舞台右侧,FastCGI。 FastCGI 具有 CGI 的优点,并且可扩展性更好。 :) mod_php 在加载的服务器上可能会死亡。
  • @Xorlev 为加载的服务器想想 nginx + phpfpm ;)
  • @Mike:任何语言都可能在坏人手中导致人类死亡。如果你对一门语言足够了解,并且是一名高级程序员(广义上,不仅仅是一种语言),那么没有一种语言是不好的。每种语言都有自己的优缺点,没有解决所有问题的灵丹妙药。
  • 当您使用 mod_php 时,apache 进程会使用更多内存,如果您提供许多不使用 PHP 的静态文件,这可能会耗尽所有可用内存并带来你的服务器崩溃了
  • @carlosvini,肯定有办法根据请求进行配置吗?例如。如果您看到对 .gif 文件的请求,请不要费心加载 PHP 部分。
【解决方案2】:

普通 CGI 要求在请求时为每个请求生成进程。

mod_php 要求您使用臃肿的 apache 而不是 slick nginx 或 lighttpd。此外,Pascal 提到的“Apache 和 PHP 之间更好的通信”可能会损害 apache(它会损害任何使用 php 开发的人!;-))。

FastCGI 让您可以将 php 与 Web 服务器分开(可能在不同的主机上运行它)。

【讨论】:

    【解决方案3】:

    另外,php.net 今天刚刚发布了一个漏洞,如果您使用mod_cgi 运行 PHP 并且您的 PHP 版本早于 PHP 5.3.12PHP 5.4.2.

    http://www.php.net/archive/2012.php#id2012-05-03-1

    通过升级或应用mod_rewrite 规则打补丁。

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2015-01-11
      • 2011-02-18
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2011-01-11
      • 2011-02-15
      • 2020-03-17
      相关资源
      最近更新 更多