1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#php的生命周期,无论从init脚本中调用还是从命令行启动 #都会依次经过Module init、Request init、Request shutdown、Module shutdown #当然,这之间还会执行脚本自己的逻辑。 #两种init和两种shutdown各执行多少次、各自的执行频率,取决于php用什么SAPI与宿主通信 #最常见的四种启动php的方式如下: #直接以CLI/CGI模式调用 #多进程模块 #多线程模块 #Embedded(嵌入式,在自己的C程序中调用Zend Engine) #SAPI(Server abstraction API,服务器抽象化接口)提供一个接口,使PHP可以和其他应用进行交互数据 #命令行运行一个php程序的主要流程如下(php5): php -f test.php Call each extension's MINIT '// //上面过程在扩展被载入时调用,一般写在扩展的以下函数中 PHP_MINIT_FUNCTION(myext) { //注册常量或者类等初始化操作 return SUCCESS; } Request test.php //上面过程请求test.php文件,初始化执行脚本的基本环境(例如创建一个执行环境, //包括保存PHP运行过程中变量名称和变量值内容的符号表,以及当前所有函数以及类等信息的符号表) Call each extension's RINIT '// //然后PHP会调用所有模块的RINIT函数,在这个阶段各个模块也可以执行一些相关的操作 PHP_RINIT_FUNCTION(myext) { /* 例如记录请求开始时间 随后在请求结束的时候记录结束时间 这样就能够记录下处理请求所花费的时间了 */ return SUCCESS; } Execute test.php //执行PHP,主要是把PHP编译成Opcodes,然后在PHP虚拟机下执行 Call each extension's RSHUTDOWN '// //请求结束(RSHUTDOWN) PHP_RSHUTDOWN_FUNCTION(myext) { //例如记录请求结束时间,并把相应的信息写入到日志文件中 return SUCCESS; } Finish cleaning up after test.php //完成清理(回收) Call each extension's MSHUTDOWN '// //SAPI生命周期结束(MSHUTDOWN) PHP_MSHUTDOWN_FUNCTION(myext) { //注销一些持久化的资源 return SUCCESS; } Terminate php //结束PHP |