网站大量收购独家精品文档,联系QQ:2885784924

PHP内核之SAPI.pdfVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PHP内核之SAPI

深入PHP 内核——SAPI 探究 摘要:PHP 作为一门简单而强大的语言,能够提供很多Web 适用的语言特性。从实践出发, 继弱类型变量原理探究后,王帅将继续带大家弄清PHP 内核中的一些常用部分,本期则是 SAPI 的深入理解。 SAPI 是Server Application Programming Interface (服务器应用编程接口)的缩写。PHP 通过SAPI 提供了一组接口,供应用和PHP 内核之间进行数据交互。 简单的讲,就像函数的输入和输出一样,我们通过Linux 命令行执行一段PHP 代码,本质 是Linux 的Shell 通过PHP 的SAPI 传入一组参数,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、phttpd pi3web、roxen、thttpd、tux 和webjames 。但是常用的只有5 种形式,CLI/CGI (命令行)、 Multiprocess (多进程)、Multithreaded (多线程)、FastCGI 和Embedded (内嵌)。 PHP 提供了一个函数查看当前SAPI 接口类型: [php] view plaincopy 1. string php_sapi_name ( void ) PHP 的运行和加载 无论使用哪种SAPI,在PHP 执行脚本前后,都包含一系列事件:Module 的Init(MINT)和 Shutdown(MSHUTDOWN),Request 的Init(RINT)和Shutdown(RSHUTDOWN)。 第一 阶段是PHP 模块初始化阶段(MINT),可以初始化扩展内部变量、分配资源和注册资源处 理器,在整个PHP 实例生命周期内,该过程只执行一次。 什么是PHP 模块?通过上面的PHP 架构图,在PHP 中可以使用get_loaded_extensions 函 数来查看所有编译并加载的模块/扩展,相当于CLI 模式下的php -m。 以PHP 的Memcached 扩展源代码为例: [php] view plaincopy 1. PHP_MINIT_FUNCTION(memcached) { 2. zend_class_entry ce; 3. memcpy(memcached_object_handlers,zend_get_std_object_handlers(), sizeof(ze nd_object_handlers)); 4. memcached_object_handlers.clone_obj = NULL; /* 执行了一些类似的初始化操 作 */ 5. return SUCCESS; 6. } 第二阶段是请求初始化阶段(RINT),在模块初始化并激活后,会创建PHP 运行环境,同 时调用所有模块注册的RINT 函数,调用每个扩展的请求初始化函数 ,设定特定的环境变 量、分配资源或执行其他任务,如审核。 [php] view plaincopy 1. PHP_RINIT_FUNCTION(memcached) { 2. /* 执行一些关于请求的初始化 */ 3. return SUCCESS; 4. } 第三阶段,请求处理完成后,会调用PHP_RSHUTDOWN_FUNCTION 进行回收,这是每 个扩展的请求关闭函数,执行最后的清理工作。Zend 引擎执行清理过程、垃圾收集、对之 前的请求期间用到的每个变量执行unset。请求完成可能是执行到脚本完成,也可能是调用 die()或exit()函数完成 第四阶段,当PHP 生命周期结束时候,PHP_MSHUTDOWN_FUNCTION 对模块进行回收 处理,这是每个扩展的模块关闭函数,用于关闭自己的内核子系统。 [php] view plaincopy 1. PH

您可能关注的文档

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档