php运行模式有哪几种

在web服务器上执行PHP脚本有多种方法。我们经常被问到这两种模式之间的区别,这里就是!
我们提供了三个最常见的PHP运行模式。

  • Apache模块
  • CGI
  • FastCGI

Apache模块(mod_php)

当使用mod_php时,PHP解释器被嵌入到服务器上生成的每个Apache进程中。通过这种方式,每个Apache工作进程都能够处理和执行PHP脚本本身,从而消除了处理任何外部进程的需要;不像CGI或FastCGI。这对于那些“PHP负担很重”的站点非常有用,因为这些站点的很多请求都可能包含PHP代码(比如WordPress、Drupal、Joomla等),因为所有的请求都可以由Apache处理。

由于解释器是与Apache一起启动的,它允许它运行得非常快,因为它可以缓存某些信息,而且不需要在每次执行脚本时重复相同的任务。

这样做的缺点是,每个Apache进程的占用空间更大,因为它需要更多的系统资源,而且还嵌入了PHP解释器。即使在提供静态内容(比如不需要执行PHP代码的图像、文本和样式表)时,该流程仍然包含PHP解释器。

优点
  • Apache执行的PHP代码。
  • 不需要外部资源。
  • 非常好的性能,在PHP沉重的网站。
  • PHP配置设置可以在.htaccess指令中定制。
缺点
  • 使每个Apache进程占用更大—意味着使用更多的RAM。
  • 为非PHP内容加载PHP解释器。
  • 由PHP脚本创建的文件通常由web服务器拥有,因此您以后不能通过FTP编辑它们。

CGI

使用CGI应用程序执行PHP脚本是在web服务器上运行应用程序的传统方式,它的效率非常低,而且很少使用。它最初是在20世纪90年代引入的,但被认为效率太低,只能用于非常小的站点。

在CGI上运行应用程序的一个好处是,它将代码的执行与web服务器分开,这允许一些附加的安全好处。例如,通过FastCGI执行的有缺陷或不安全的PHP脚本不能破坏或影响其所在域之外的任何其他文件的安全性。这还意味着只在需要时调用PHP解释器,从而允许web服务器单独提供静态内容。

在CGI支持下运行PHP的低效率导致每次需要执行任何PHP代码时都需要创建一个新进程。可以想象,在比较繁忙的站点或基于PHP的应用程序中,它可能非常消耗资源。

优点

因为PHP代码的执行是与web服务器隔离的,所以它的安全性比mod_php(上面)更好。

缺点
  • 运行应用程序的遗留方式。
  • 很差的性能。

FastCGI

FastCGI是作为PHP Apache模块和CGI应用程序之间的中间地带引入的。它允许脚本在web服务器之外由一个解释器执行,并包含CGI的安全好处,但不包括CGI的任何低效之处。

当使用FastCGI执行PHP脚本时,每个请求都通过一个通信套接字从web服务器传递到FastCGI。这允许更大的可伸缩性,因为如果需要的话,web服务器和PHP解释器可以被分割到各自的服务器环境中。然而,在Apache之前使用nginx也可以获得类似的最终结果(比如nginx自己处理基本请求,只向Apache传递动态请求),因此仅这一点并不能确定给定场景的理想选择。

优点
  • 改进了PHP代码执行与web服务器隔离的安全性。

  • 静态内容不会被PHP解释器处理。

  • 允许您的FTP用户管理文件,而不需要更改权限。

缺点
  • 不能在htaccess中使用PHP指令。这是许多流行脚本所期望的。
  • 要求从web服务器传递PHP请求。

如何选择使用哪种模式?

CGI模式先不考虑,执行效率太低。一般经验而言,如果web server是Apache则使用mod_php, 如果是nginx,则是使用fastCGI。

DNS迭代查询和递归查询的区别?
如何使用PHP OPCache?