加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php扩展开发(一 基本介绍和扩展开发的基本步骤)

发布时间:2022-09-30 04:32:41 所属栏目:PHP教程 来源:互联网
导读: 需要开发扩展的场景:
1)应用非常注重效率,如复杂的图像算法,需要编写成扩展模块
2)有些系统调用不能用PHP直接访问,比如Linux下的fork函数创建一个进程,需要编写扩展
3)需要商业化一

需要开发扩展的场景:

1)应用非常注重效率,如复杂的图像算法,需要编写成扩展模块

2)有些系统调用不能用PHP直接访问,比如Linux下的fork函数创建一个进程,需要编写扩展

3)需要商业化一个应用,又不想暴露源码

一,搭建PHP框架

1 先了解下PHP的源目录吧

ext:存放动态和内建模块的目录,在这里可以找到所有的官方扩展,以后也会在这里放新的扩展

main:包含PHP的主要的宏定义

pear:PHP的扩展与应用库目录,包含pear的核心文件

sapi:包含不同服务器抽象层的代码

TSRM:zned和php的线程安全资源管理器目录

zend:包含zend引擎的所有文件php扩展,可以找到所有Zend API的定义

除了上边的文件目录,一般还会包括下边几个文件进来:

main/php.h : 位于main目录下,包含绝大部分的PHP宏以及PHP API的定义

Zend/zend.h : 位于Zend目录下包含绝大部分的zend宏和Zend API的定义

Zend/zend_API.h : 位于zend目录下,包含Zend API的定义

2 ext_skel工具:

在ext的源码目录下,有ext_skel和ext_skel_win32.h两个自动化构建扩展开发的框架工具,前者在Linux下使用,后者在win下使用

win下扩展开发的介绍:

1)使用ext_skel工具编写扩展

a) cd到PHP源码目录的ext目录下,输入以下命令扩展框架:

php ext_skel_win32.php --extname = myext (如果提示php不是内部或者外部命令,也不是可运行的程序或批处理文件,请先安装PHP,并且添加php到环境变量中)

b)安装成功之后会发现ext目录下多了一个myext目录,myext目录中,myext.dsp是VC++的工程文件

c)编译安装扩展

??用VC++打开myext.dsp工程文件,按编译按钮开始编译这个扩展,在编译的过程中,会发现编译出错提示:link fatal error:can'tfind input files "php5ts.lib",从PHP的安装目录下(注意不是php的源码目录,是安装目录)的dev目录中把php5ts.lib复制到创建的扩展目录(myext)目录下,再次按编译按钮,这次可以成功编译

d)编译成之后源代码的根目录会多出一个Release_TS目录,在该目录中有刚刚编译好的动态扩展文件 php_myext.dll,如果找不到Release_TS目录,而找到了debug_TS目录,请把VC++的编译模式改成release模式

到此已经编译出了一个PHP扩展文件,只要把编译出的php_myext.dll放到安装目录的ext目录下,在php.ini中添加extension =php_myext.dll 并重启web服务器就可以了,安装完成之后就可以像其它扩展一样在phpinfo里看到扩展信息了,可以调用一下扩展封装的函数来确认是否安装成功

Linux下扩展开发的介绍(以ubutun系统为例):

a)安装php-dev包

使用php-dev包中的phpize工具可以减少很多繁琐的步骤,如果用php源码编译的话,就可以不用安装php-dev包,源码中已经饱和phpize工具,在ubutun下安装dev包的命令是 sudo spt-get install php5-dev安装完成后,可以使用以下命令查看是否安装成功 phpize --version,如果显示phpize的版本信息就证明安装成功

b)使用ext_skel工具,在php的源码目录下有个ext_Skel文件,用法与win下的ext_skel_win32.h类似

eg:创建一个php扩展

./ext_skel --extname=myext 然后,可以看到一系列的提示步骤

c)编译安装扩展

在生成扩展之后,进入到扩展目录,使用phpize命令生成扩展的配置工具,然后编译和安装:

cd myext

phpize

./configure --with-php-config =/usr/local/php5/bin/php-config

make

maketest

make install

编译完成后可以在/usr/local/php5/lib/php/extensions/no_debug_non_.../下看到生成的扩展文件myext.so

然后在phpini文件中添加扩展信息 extension = myext.so

d)使用 php -m | grep myext 查看扩展是否安装成功

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!