博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP底层探索(一):几种常见的SAPI
阅读量:4097 次
发布时间:2019-05-25

本文共 1337 字,大约阅读时间需要 4 分钟。

SAPI: Server Application Programming Interface 服务器端应用编程端口.即php与其他应用交互的接口.

常用的SAPI有:cgi fast-cgi cli apache的DLL

CGI

CGI即通用网关接口(Common Gateway Interface),他是一段程序,通俗的讲CGI就像是一座桥,把网页和web服务器中的执行程序连接起来,CGI把html接收的指令传给服务器执行程序,再把服务器处理的结果返回 给html页面.
CGI方式在发现用户的连接请求时,先创建CGI进程,并使用,然后进行处理,处理完成后结束该子进程.(fork-and-execute),所以使用CGI方式的服务器有多少请求就会创建多少子进程,子进程反复加载是CGI系能低的主要原因.当用户请求非常多时,会占用大量的系统资源.

Fast-CGI

更像是CGI的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行者,只要激活后,不会每次都花时间fork一次.php使用php-fpm(FastCGI Process Manager) 全称PHP FastCGI进程管理器进行管理.
fastcgi的工作原理
Web Server启动时挂载php-fpm并初始化,启动多个FastCGI解释器进程,并等待Web Server的连接.
当连接到Web Server时,php-fpm选择并连接到一个CGI解释器,Web Server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.子进程完成处理后,将标准输出和错误信息,返回给Web Server . 当子进程关闭链接是,请求便算是完成. 子进程接着等待并处理来自php-fpm的下一个连接.在CGI模式中,子进程便在这结束了.
在上述过程中,可以想到CGI有多慢,每一个请求php都必须解析php.ini 重新载入全部扩展,并重新初始化全部数据结构,使用FastCGI,所有这些只会在启动时载入一次,并且,持续数据库连接*(Persistent database connection)* 可以工作.

APACHE2HANDLER

php作为apache模块,apache服务器在系统启动后,会预先创建多个进程副本驻留内存,等待连接出现,一旦有请求,就立即使用空闲的子进程进行处理,这样就不存在生成子进程时的延迟.这些服务器副本在处理完成后,不退出,而是继续等待请求出现,反应更快,性能更高.

CLI

1.完全支持多线程

2.可实现定时任务
3.linux下可用php编写shell脚本
(经常用的东西,还不知道有这么多参数..)
使用PHP CLI传递脚本参数的形式:
-a 交互式运行Run interactively
-c path 从path读取php的.ini文件
-n 不用读取php的.ini文件就直接运行
-m 列出经过编译的模块
-i 显示有关PHP构建的信息
-l 检查PHP脚本的句法
-s 以彩色方式显示源代码
-w 显示去掉注释之后的源代码
-h 显示帮助

至此,我对SAPI有了一定的认识

想了解更多,可以看官方手册:

转载地址:http://qyoii.baihongyu.com/

你可能感兴趣的文章
垃圾回收算法之复制算法
查看>>
Java虚拟机工具之虚拟机进程状况工具jps
查看>>
Java虚拟机工具之虚拟机统计监控工具jstat
查看>>
sed编辑器基础之替换命令
查看>>
gawk程序基础
查看>>
JVM架构之JVM工作原理
查看>>
Java中的垃圾回收
查看>>
sed编辑器基础之替换命令(二)
查看>>
Java代码中如何交换两个对象
查看>>
Java中的随机数
查看>>
Java虚拟机工具之堆栈跟踪工具jstack定位死循环
查看>>
OpenCV在Microsoft Visual Studio 2010环境中的配置
查看>>
在VS(Visual Studio)中运行带有参数的控制台程序
查看>>
第N个偶斐波那契数
查看>>
字符数目相同的子字符串的数目
查看>>
Java虚拟机工具之堆栈跟踪工具jstack检测死锁
查看>>
Java虚拟机工具之堆栈跟踪工具jstack检测输入等待
查看>>
Java虚拟机工具之堆栈跟踪工具jstack检测对象wait方法
查看>>
Windows下Jconsole无法连接到进程
查看>>
设置tomcat启动参数
查看>>