写出PHP程序的执行流程,PHP程序的执行流程

http://blogread.cn/it/article/5524?f=wb

为了之后能开发PHP扩展,就必定要了解PHP的执行顺序。这篇文章就是为C开发PHP扩展作铺垫。 Web环境咱们假设为Apache。在编译PHP的时候,为了可以让Apache支持PHP,咱们会生成一个mod_php5.so的模块。Apache加载这个模块,在url访问.php文件的时候,就会转给mod_php5.so模块来处理。这个就是咱们常说的SAPI。英文名字是:Server Application Programming Interface。SAPI实际上是一个统称,其下有 ISAPI,CLI SAPI,CGI等。有了它,就能够很容易的跟其余东西交互,好比APACHE,IIS,CGI等。 Apache启动后会将mod_pho5.so模块的hook handler注册进来,当Apache检测到访问的url是一个php文件时,这时候就会把控制权交给SAPI。进入到SAPI后,首先会执行sapi/apache/mod_php5.c 文件的php_init_handler函数,这里摘录一段代码:

该函数主要调用两个函数:sapi_startup(&apache_sapi_module); php_apache_startup(&apache_sapi_module);php

sapi_startup建立一个 sapi_globals_struct结构体。sapi_globals_struct保存了Apache请求的基本信息,如服务器信息,Header,编码等。sapi_startup执行完毕后再执行php_apache_startup。mysql

php_module_startup 内容太多,这里介绍一下大体的做用:sql

1. 初始化zend_utility_functions 结构.这个结构是设置zend的函数指针,好比错误处理函数,输出函数,流操做函数等.apache

2. 设置环境变量.api

3. 加载php.ini配置.服务器

4. 加载php内置扩展.app

5. 写日志.函数

6. 注册php内部函数集.编码

7. 调用 php_ini_register_extensions,加载全部外部扩展url

8. 开启全部扩展

9. 一些清理操做.

重点说一下 3,4,7,8

加载php.ini配置

php_init_config函数会在这里检查全部php.ini配置,而且找到全部加载的模块,添加到php_extension_lists结构中。

加载php内置扩展

调用 zend_register_standard_ini_entries加载全部php的内置扩展,如array,mysql等。

调用 php_ini_register_extensions,加载全部外部扩展

main/php_ini.c

zend_llist_apply函数遍历extension_lists 执行会掉函数 php_load_php_extension_cb

php_load_php_extension_cb

该函数最后调用

将扩展信息放到 Hash表module_registry中,Zend/zend_API.c

最后,zend_startup_modules(TSRMLS_C); 对模块进行排序,并检测是否注册到module_registry HASH表里。zend_startup_extensions(); 执行extension->startup(extension);启动扩展。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值