php扩展及作用,技术文章--《PHP扩展及核心》

一、主要内容:

1php扩展的概念和底层实现

2编写一个php扩展的步骤

3php底层,Zend 引擎API的介绍 ,HashTable 原理

c9cb84877c1fb47f5d39b26cff352608.png

二、相关概念

1.【php扩展】

php的插件,也就是php的扩展,因为php的底层就是C语言。

php –m 或者 php –i 都可以查看扩展。

其实,xhproh, curl都是php的扩展。

d41f4f35be5e99dc779e8d1e159324cd.pngphp的扩展图phpinfo()

2.【为什么要有扩展?】

1)【效率高】复杂的图像算法,需要写成PHP扩展

2)【操作底层,未支持的技术】1)PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。 2)有些系统调用不能用PHP直接访问,需要编写成扩展,比如使用Linux下的fork()函数创建一个进程。

3)【商业化,保护源码】想商业话一个应用,但是又不想暴露源代码,就可以编写成扩展。

3.【PHP核心组成?】

Zend引擎:1)核心、基础设施 2)PHP语法实现 3)脚本编译执行 4)扩展机制 5)内存管理

SAPI:服务器抽象层, 上层调用它

cfbf0a7c5d9de6075184127b4d65fb83.pngphp核心构成图

二、走向开发(编写扩展)

8571a99f8c357139c4162f6122d0db7d.png总体步骤

①下载PHP源码

要开发PHP扩展,第一步要下载PHP源代码,因为里面有开发扩展需要的工具。

下载地址: wget http://cn2.php.net/get/php-5.5.38.tar.gz/from/this/mirror

②生成扩展组件框架

ext_skel 命令

./ext_skel --extname=myext 会生成扩展基础文件夹及文件 php-5.5.38/ext/myext/

③修改配置文件

修改config.m4文件,去掉配置前的dnl

config.m4: 这是Unix环境下的Build System配置文件,后面将会通过它生成配置和安装。

07defb254224536c8783d8d194650b5f.png修改配置config.m4

④编写核心函数(可用默认的)

步骤如下(myext.c):

1、使用宏PHP_FE将函数加入到myext_functions中

2、使用宏PHP_FUNCTION定义函数体

3a3cd8c31d3b689828a449210fa773f9.png扩展c文件myext.c

⑤编译扩展+重启

1、调用phpize程序生成编译配置文件 cd myext && phpize

2、编译扩展库 ./configure --with-php-config=/Data/apps/php/bin/php-config

3、make

4、make test

5、sudo make install 生成myext.so 文件

6、 sudo vim /Data/apps/php/lib/php.ini 加上 extension=myext.so

7、 sudo /Data/apps/php/sbin/php-fpm reload

bc9e50132173891f74bf63072300ec42.png修改php配置文件,添加扩展

三、了解原理

387c8ceda7ca9bee22d7e4910ce727bc.pngphp的生命周期

b0696adbd7ac54992508ae93f92ca41e.pngphp的变量在内核--写时复制

b901d29ace86a68bbb5c0ed2951afbeb.pngphp的变量在内核--底层代码对比

b7722799d088405e7565d1aacc4bdece.pngphp的变量在内核--结构体表示

103096d1705075ae66de2311b200d173.pngHashTable分析--结构体

c751ef6bb5dce99cd0679bd1a2a355ed.pngHashTable分析--绘图表示

4b65601a98fe2f92529dbd43a070d2d1.pngZend引擎API

四、写在最后

php的核心是C语言,核心引擎是Zend,了解HashTable就能了解php的精髓。php的扩展开发说到底是C语言的编写,更见底层功力,希望大家都能成为技术大牛。

最后,预祝大家2018年万事如意,心想事成!

举报/反馈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值