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


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

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

谢谢


5005
2018-05-02 16:05


起源

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


答案:


使用CGI时:Apache启动了一个PHP进程,PHP进程解释PHP代码 - 而不是Apache 本身

理论上,必须为每个请求创建一个独特的PHP进程 - 这会使事情变得更慢:Apache有更多的工作要做以回答请求。
(好吧,正如@ AlReece45在评论中指出的那样,使用FastCGI可以做得更好)


使用PHP作为Apache模块时 mod_php, 要么 mod_php5,PHP解释器有点“嵌入式“在Apache进程内部:没有外部PHP进程。

意思是 :

  • 没有分叉回答请求(更快)
  • Apache和PHP之间更好的沟通


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


10
2018-05-02 16:08



输入右侧的FastCGI。 FastCGI具有CGI的优点,并且可以更好地扩展。 :) mod_php可以在加载的服务器上死亡。 - Xorlev
@Xorlev为加载的服务器想到nginx + phpfpm;) - Your Common Sense
任何形式的PHP都可能导致人类死亡! ;-) - Michael Krelin - hacker
@Mike:任何语言都可能导致人类在坏人手中死亡。如果你对一门语言有足够的了解,并且是一名高级程序员(从广义上讲,不仅仅是一种语言),那么语言就不好了。每种语言都有自己的优点和缺点,所有问题都没有灵丹妙药。 - Seb
当你使用mod_php时,apache进程会占用更多内存,如果你提供许多不使用PHP的静态文件,耗尽你所有可用的内存并让你的服务器瘫痪,这可能是一个非常糟糕的主意。 - carlosvini


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

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

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


3
2018-05-02 17:38





此外,php.net刚刚发布了一个漏洞,如果您正在使用,可能会泄露源代码 mod_cgi 运行PHP,你的PHP版本比 PHP 5.3.12 要么 PHP 5.4.2

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

通过升级或应用修补程序 mod_rewrite 规则。


1
2018-05-03 21:42