深入理解Zend SAPIs(Zend SAPI Internals)

SAPI: Server abstraction API,研究过PHP架构的同学应该知道这个东东的重要性,它提供了一个接口,使得PHP可以和其他应用进行交互数据。 本文不会详细介绍每个PHP的SAPI,只是针对最简单的CGI SAPI,来说明SAPI的机制。

首先,我们来看看PHP的架构图:

PHP架构图

PHP架构图


图1 PHP Architecture

SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI,本文就从CGI SAPI入手 ,介绍SAPI的机制。 虽然CGI简单,但是不用担心,它包含了绝大部分内容,足以让你深刻理解SAPI的工作原理。

要定义个SAPI,首先要定义个sapi_module_struct, 查看 PHP-SRC/sapi/cgi/cgi_main.c:

 
 
  1.  */
  2. static sapi_module_struct cgi_sapi_module = {
  3. #if PHP_FASTCGI
  4.     "cgi-fcgi", /* name */
  5.     "CGI/FastCGI", /* pretty name */
  6. #else
  7.     "cgi", /* name */
  8.     "CGI", /* pretty name */
  9. #endif
  10.  
  11.     php_cgi_startup, /* startup */
  12.     php_module_shutdown_wrapper, /* shutdown */
  13.  
  14.     NULL, /* activate */
  15.     sapi_cgi_deactivate, /* deactivate */
  16.  
  17.     sapi_cgibin_ub_write, /* unbuffered write */
  18.     sapi_cgibin_flush, /* flush */
  19.     NULL, /* get uid */
  20.     sapi_cgibin_getenv, /* getenv */
  21.  
  22.     php_error, /* error handler */
  23.  
  24.     NULL, /* header handler */
  25.     sapi_cgi_send_headers, /* send headers handler */
  26.     NULL, /* send header handler */
  27.  
  28.     sapi_cgi_read_post, /* read POST data */
  29.     sapi_cgi_read_cookies, /* read Cookies */
  30.  
  31.     sapi_cgi_register_variables, /* register server variables */
  32.     sapi_cgi_log_message, /* Log message */
  33.     NULL, /* Get request time */
  34.  
  35.     STANDARD_SAPI_MODULE_PROPERTIES
  36. };

这个结构,包含了一些常量,比如name, 这个会在我们调用php_info()的时候被使用。一些初始化,收尾函数,以及一些函数指针,用来告诉Zend,如何获取,和输出数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值