php内核之sapi

php内核之sapi

ID:27728992

大小:835.00 KB

页数:9页

时间:2018-12-05

php内核之sapi_第1页
php内核之sapi_第2页
php内核之sapi_第3页
php内核之sapi_第4页
php内核之sapi_第5页
资源描述:

《php内核之sapi》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、深入PHP内核——SAPI探究摘要:PHP作为一门简单而强大的语言,能够提供很多Web适用的语言特性。从实践出发,继弱类型变量原理探究后,王帅将继续带大家弄清PHP内核中的一些常用部分,本期则是SAPI的深入理解。SAPI是ServerApplicationProgrammingInterface(服务器应用编程接口)的缩写。PHP通过SAPI提供了一组接口,供应用和PHP内核之间进行数据交互。简单的讲,就像函数的输入和输出一样,我们通过Linux命令行执行一段PHP代码,本质是Linux的Shell通过PHP的SAPI传入一组参数

2、,Zend引擎执行后,返回给shell,由shell显示出来的过程。同样的,通过Apache调用PHP,通过Web服务器给SAPI传入数据,Zend引擎执行后,返回给Apache,由Apache显示在页面上。图1.PHP架构图PHP提供很多种形式的接口,包括apache、apache2filter、apache2handler、caudium、cgi、cgi-fcgi、cli、cli-server、continuity、embed、isapi、litespeed、milter、nsapi、phttpdpi3web、roxen、tht

3、tpd、tux和webjames。但是常用的只有5种形式,CLI/CGI(命令行)、Multiprocess(多进程)、Multithreaded(多线程)、FastCGI和Embedded(内嵌)。PHP提供了一个函数查看当前SAPI接口类型:[php]viewplaincopy1.stringphp_sapi_name(void)PHP的运行和加载无论使用哪种SAPI,在PHP执行脚本前后,都包含一系列事件:Module的Init(MINT)和Shutdown(MSHUTDOWN),Request的Init(RINT)和Shut

4、down(RSHUTDOWN)。第一阶段是PHP模块初始化阶段(MINT),可以初始化扩展内部变量、分配资源和注册资源处理器,在整个PHP实例生命周期内,该过程只执行一次。什么是PHP模块?通过上面的PHP架构图,在PHP中可以使用get_loaded_extensions函数来查看所有编译并加载的模块/扩展,相当于CLI模式下的php-m。以PHP的Memcached扩展源代码为例:[php]viewplaincopy1.PHP_MINIT_FUNCTION(memcached){2.zend_class_entryce;3.me

5、mcpy(&memcached_object_handlers,zend_get_std_object_handlers(),sizeof(zend_object_handlers));4.memcached_object_handlers.clone_obj=NULL;/*执行了一些类似的初始化操作*/5.returnSUCCESS;6.}第二阶段是请求初始化阶段(RINT),在模块初始化并激活后,会创建PHP运行环境,同时调用所有模块注册的RINT函数,调用每个扩展的请求初始化函数,设定特定的环境变量、分配资源或执行其他任务,如

6、审核。[php]viewplaincopy1.PHP_RINIT_FUNCTION(memcached){2./*执行一些关于请求的初始化*/1.returnSUCCESS;2.}第三阶段,请求处理完成后,会调用PHP_RSHUTDOWN_FUNCTION进行回收,这是每个扩展的请求关闭函数,执行最后的清理工作。Zend引擎执行清理过程、垃圾收集、对之前的请求期间用到的每个变量执行unset。请求完成可能是执行到脚本完成,也可能是调用die()或exit()函数完成第四阶段,当PHP生命周期结束时候,PHP_MSHUTDOWN_FU

7、NCTION对模块进行回收处理,这是每个扩展的模块关闭函数,用于关闭自己的内核子系统。[php]viewplaincopy1.PHP_MSHUTDOWN_FUNCTION(memcached){/*执行关于模块的销毁工作*/UNREGISTER_INI_ENTRIES();returnSUCCESS;}常见的运行模式常见的SAPI模式有五种:•CLI和CGI模式(单进程模式)•多进程模式•多线程模式•FastCGI模式•嵌入式1.CLI/CGI模式CLI和CGI都属于单进程模式,PHP的生命周期在一次请求中完成。也就是说每次执行PH

8、P脚本,都会执行第二部分讲的四个INT和Shutdown事件。图2.CGI/CLI生命周期1.多进程模式(Multiprocess)多进程模式可以将PHP内置到WebServer中,PHP可以编译成Apache下的preforkMPM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。