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

需要开发扩展的场景:

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

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

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


一,搭建PHP框架

1  先了解下PHP的源目录吧

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

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

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

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

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

   zend:包含zend引擎的所有文件,可以找到所有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 查看扩展是否安装成功












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值