PHP 常见的运行模式有哪几种 - PHP 面试题

PHP 常见的运行模式有哪几种?

这个问题十分经典,我是建议伴随着 ubuntu linux下自带的 PHP 安装包来讲解比较合适。


以往遇到问题总是有人说自己改了 PHP 配置文件,但是就是不生效,八成就是改错配置文件了。


先说最经典的php运行模式,就是apache mod模式,这种模式下,php是作为apache的一个模块而活着的,这就是最早期的LAMP模式。这会儿只要是配置apache配置,将php mod加载进来后重启apache服务即可。值得注意的是,php的运行权限将跟随apache的运行权限。apache收到php请求后,是交给php mod处理完再返回给apache即可。


fast-cgi 模式,这种模式下,就是所谓的 LNMP 模式了。fast cgi 是一种协议,任何脚本语言都可以遵循这种协议,不仅局限于php。只要语言本身可以解析fast cgi协议就可以。php的fast cgi协议是通过fpm进程管理器来实现的,而fpm则是一种master多slave的进程模型。fpm作为daemon服务一旦启动后,将会常驻内存,通过这个来提高性能,那么,之后就该说一下cgi了。然而,此时http服务器往往会搭配nginx,其实就是nginx通过默认端口在9000的fpm进行通信,通信协议就是靠的fastcgi!明白了吧


cgi模 式,比 fast cgi 少了一个 fast。这种模式下的 php 性能比较低劣,单进程的,php 收到请求后将会启动一个 cgi 进程,解析完毕 php 脚本后将结果返回给客户端,这个 cgi 进程就会销毁掉,一旦请求量大了,性能非常低劣。所以,知道fast cgi的常驻内存为什么比 cgi 牛逼了吧。


cli模式,这种模式下的php极具高性能生产环境价值!cli模式有一个很大的好处就是可以使php程序常驻内存,可以实现多进程。如果有一些定时任务,定时脚本什么的,完全可以使用php的cli模式来实现,建议大家私下都多尝试尝试这种模式。比如 workerman、swoole 都是基于 php 的 cli 模式下实现的。


最后还有一种极为奇葩的模式,叫做 embed 模式,不甚了解,没用过,面试问这个题,我感觉你提一下就可以了。