1 前言
这篇文章是我个人的学习笔记,我把这篇文章送给所有喜欢PHP语言,喜欢PHP扩展开发的同行、同学们。
2 前期准备
闲话不和大家撤了,如果您想学习php的扩展开发,相信您对php基础知识已经有了一定的了解。PHP扩展时用C语言编写的,如果您还不知道C语言
里面指针式什么东西,建议您先移步他出,好好学习一下C语言,大家都在骂谭浩强的《C语言程序设计》,但是我仍然建议您好好看看这本书。
做PHP开发得先准备一下环境吧。说起来容易,对于一些新手来说恐怕也是一场噩梦。建议您安装UBUNTU LINUX,网上有很多的linux安装教程,相信我不用多说了。
我们假设您已经安装了linux,我用的debain,不过ubuntu的同学不用担心,因为ubuntu是debain变话而来的,所谓万变不离其宗,相信您使用ubuntu可以达到同样的效果。
2.1 开发环境搭建
首先,我们安装一下php的开发环境:PHP+APACHE2+MYSQL
UBUNTU下的安装很简单,简单到您只需要执行下面的命令就可以了:
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5
sudo apt-get install mysql-server
sudo apt-get install libapache2-mod-auth-mysql
sudo apt-get install php5-mysql
sudo /etc/init.d/apache2 restart
2.2 源码部署
进行php扩展开发我们还需要下载一份php的源代码,我们以PHP5.3为例进行php扩张开发讲解,下面是一些下载地址,为了防止下载链接失效,我会不断更新链接,当然PHP版本不会变化^_^
http://cn2.php.net/get/php-5.3.19.tar.gz/from/this/mirror
你也可以到www.php.net上面,点击download下载源码。
假设您已经或得到了源码,下面我们将源代码解压缩 tar xzvf php-5.3.19 如果这个命令不能正确解压缩的话请使用tar xvf php-5.3.19试试,再不行的话用rar解压缩吧,我相信你总有办法将这个文件解压缩~ 多大的事 - _ -
我们的php扩展是在linux上面开发的,如果您想在win上面开发,这片文章恐怕不太适合您了。但是技术这种东西都是触类旁通,希望您在win上面部署好了环境再来看看我的文章。
3 一切都是从HelloWorld开始的
还记得第一次写代码,是用C语言打印出来了HelloWorld,那天我兴奋激动了一天。希望你你看完本页内容后自己也写一个helloworld的php扩展。
第一个扩展程序,改怎么写呢?
其实很简单~~~ 开始吧~~
上次我们说,我们第一步需要卸载php的源代码,你下载好了吗?
建议:建议大家在开发时,只安装一个php,其实在一个系统中你可以安装多个php,但是为了避免前期很多不必要的解释,读者最好安装一个。等你对php娴熟后,多个php就不在话下了。
3.1 进入扩展目录 cd php-5.3.19/ext
ext文件夹存放了是php扩展的源代码,同样的,我们编写扩展也需要这里面进行
大家可以看看ext文件夹下各个文件夹的名字:mysql、xml、zip、sqlite...这些都是php的扩张
3.2 建立扩展开发框架 ./ext_skel --extname=helloworld
执行上面的命令建立扩张开发的框架,这是你会发现ext文件夹下面多了一个叫helloworld的文件夹,同时命令行也输出了一些文本,
我们先把这些东西放在这里,不做解释,稍后大家在看看输出的命令是什么意思。
记者这幅图奥,我们下面会分析
3.3 进入php源码的根目录, 编辑文件 vi ext/helloworld/config.m4
去掉这个文件中的几行注释
所谓的取消注释,就是讲16~18行前面的dnl去掉而已(不同版本的php源码行数可能不一样,请大家注意)
注释取消后,保存文件并且退出
3.4 在php根目录执行命令./buildconf --force 这一步以后的文章中进行解释
3.5 在php源码的根目录编译php程序,注意命令为 ./configure--with-helloworld
3.6 进入我们的扩张目录helloworld,执行命令 phpize
3.7 在helloworld目录编译我们的扩展./configure --with-php-config=/usr/local/bin/php-config(使用你自己环境的php-config)--enable-helloworld
3.8 执行make命令 make
我在执行make的时候,系统报错,错误信息为
/home/work/src/php-5.3.19/ext/helloworld/helloworld.c:43: error:'PHP_FE_END' undeclared here (not in a function)
make: *** [helloworld.lo] Error 1
此时,请大家讲helloworld.c中的第43行中PHP_FE_END换成{NULL,NULL, NULL}
替换完成后,请大家执行make命令重新编译
3.9 安装我们的扩展
有些同学可能知道,php的程序可以使用makeinstall进行安装,但是为了更好的理解php的工作原理,
我们采用手动安装php扩展的方式进行安装,其实php的安装非常简单
3.9.1 找到php的扩展安装目录
work@baidu:~$ php -r "phpinfo();" | grep extension_dir
extension_dir => /usr/lib/php5/20090626+lfs =>/usr/lib/php5/20090626+lfs
我们需要将我们的扩张安装到/usr/lib/php5/20090626+lfs目录下面,
在helloworld目录下面执行命令
sudo cpmodules/helloworld.so /usr/lib/php5/20090626+lfs 目录/usr/lib/php5/20090626+lfs需要根据自己的实际情况作出改动
3.9.2 在php.ini中打开我们的扩展
同样,请执行下面的命令
work@baidu:~$ php -r "phpinfo();" | grep"php.ini"
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
可以看出php.ini的路径为/etc/php5/cli/php.ini
sudo vi /etc/php5/cli/php.ini
在文件的最后一行添加代码 extension=helloworld.so
3.10 验证我们的扩展时否安装成功
你可以通过执行下面的命令进行验证 php -r "phpinfo();" | grep helloworld
如果你安装成功的话,应该看到下面的信息
root@baidu:/usr/lib/php5/20090626+lfs# php -r "phpinfo();" |grep helloworld
helloworld
helloworld support => enabled
至此,php扩展安装完成
也许你会问,我该怎么打印helloworld呢,别急,下面接着就将helloworld程序了。
3.11 进入扩展helloworld目录,编辑文件php_helloworld.h,在最后一行添加函数 PHP_FUNCTION(fun_helloworld);
3.12 在helloworld.c中实现我们的函数
将fun_helloworld函数加入到helloworld_functions[]中
3.13 编译扩展 make
3.14 按照step 9-2 重新安装我们的扩展
3.15 验证扩展函数
php -r "echo fun_helloworld();"
如果一切顺利的话,你就可以看到我们的问候语句了Hello World !
3.16 写在后面的话
也许你按照我的步骤走到最后,你看到了我们的问候语hello world,也许你没有,但是我已经尽力的把开发的过程描述的尽量详细,请大家勿要骂我。其实做程序开发的过程就是一个不断解决问题的过程,如果你在我上面的步骤中遇到了问题,那么我要恭喜你,因为你得到一个提高自己能力的机会
补充:Web开发 , php ,