最新消息: 新版网站上线了!!!

php扩展 php源码入口函数 cgi模式下其入口函数在cgi_main.c fpm模式下其入口函数在fpm_main.c

一、php源码入口函数

        php是由c语言开发的,既然是C语言,那么就必须有main()这样一个入口函数,而php是按照模式运行的

        1.    cgi模式下其入口函数在cgi_main.c

        2.    fpm模式下其入口函数在fpm_main.c

二、sapi服务器应用编程接口

        http://wenku.baidu.com/link?url=rTbWxCKsj2kAq9ncAlb2FzuLgqV9CgN2qJI4FlHcHES5kJRa1DCdVXuMADfgpQDVbItrkQy1Ah7X87g_ZvjhOmy58Ywudk0duGO1_cMOPWa

        php通过sapl提供了一组接口,供应用和php内核之间进行数据交互

        我们通过Linux命令行执行一段PHP代码,本质是Linux的Shell通过PHP的SAPI传入一组参数,Zend引擎执行后,返回给shell,由shell显示出来的过程。同样的,通过Apache调用PHP,通过Web服务器给SAPI传入数据,Zend引擎执行后,返回给Apache,由Apache显示在页面上。

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接口类型

        string php_sapi_name(void);

php的运行和加载

无论使用哪种sapi,在php执行脚步前后,都包含一系列事件:module的init(mint)和shutdown(mshutdown),request的init(rint)和shutdown(rshutdown)。

第一阶段是php模块初始化阶段(mint),可以初始化扩展内部变量、分派资源和注册资源处理器,在整个php实例生命周期内,该过程只执行一次。

什么是php模块?在php中可以使用get loaded extensions函数查看所有编译并加载的模块/扩展,相当于cli模式下的php -m

以PHP的Memcached扩展源代码为例:

1. PHP_MINIT_FUNCTION(memcached) {       

2.     zend_class_entry ce;       

3.     memcpy(&memcached_object_handlers,zend_get_std_object_handlers(), sizeof(zend_object_handlers));       

4. memcached_object_handlers.clone_obj = NULL;     /* 执行了一些类似的初始化操作 */       

 5. return SUCCESS;   

 6. }

第二阶段,请求初始化阶段(rint),在模块初始化并激活后,会创建php运行环境,同时调用所有模块注册的rint函数,调用每个扩展的请求初始化函数,设定特定的环境变量、分配资源或者执行其他任务

PHP_RINIT_FUNCTION(memcached){

    /*执行一些关于请求的初始化*/

    return  success;

}

第三阶段,请求处理完成后,调用PHP_RSHUTDOWN_FUNCTION进行回收,这是每个扩展的请求关闭函数,执行最后的清理工作。zend引擎执行清理过程、垃圾收集、对之前请求期间用到的每个变量执行unset。请求完成可能是执行到脚本完成,也可能是调用die()或exit()函数完成

第四阶段,php生命周期结束时候,PHP_MSHUTDOWN_FUNCTION对模块进行回收处理,这时每个扩展的模块关闭函数,用于关闭自己的内核子系统。

PHP_MSHUTDOWN_FUNCTION(memcached){

    /*执行关于模块的销毁工作*/

    UNREGISTER_INI_ENTRIES();

    return SUCCESS;

}


转载请注明:谷谷点程序 » php扩展 php源码入口函数 cgi模式下其入口函数在cgi_main.c fpm模式下其入口函数在fpm_main.c