当前位置:编程学习 > php >>

PHP扩展开发-v1.0

 
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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,