还记得第一次写代码,是用C语言打印出来了HelloWorld,那天我兴奋激动了一天。希望你你看完本页内容后自己也写一个helloworld的php扩展。
第一个扩展程序,改怎么写呢?
其实很简单~~~ 开始吧~~
上次我们说,我们第一步需要卸载php的源代码,你下载好了吗?
建议:建议大家在开发时,只安装一个php,其实在一个系统中你可以安装多个php,但是为了避免前期很多不必要的解释,读者最好安装一个。等你对php娴熟后,多个php就不在话下了。
step 1. 进入扩展目录 cd php-5.3.19/ext
ext文件夹存放了是php扩展的源代码,同样的,我们编写扩展也需要这里面进行
大家可以看看ext文件夹下各个文件夹的名字:mysql、xml、zip、sqlite...这些都是php的扩张
step 2. 建立扩展开发框架 ./ext_skel --extname=helloworld
执行上面的命令建立扩张开发的框架,这是你会发现ext文件夹下面多了一个叫helloworld的文件夹,同时命令行也输出了一些文本,
我们先把这些东西放在这里,不做解释,稍后大家在看看输出的命令是什么意思。
记者这幅图奥,我们下面会分析
step 3. 进入php源码的根目录, 编辑文件 vi ext/helloworld/config.m4
去掉这个文件中的几行注释
所谓的取消注释,就是讲16~18行前面的dnl去掉而已(不同版本的php源码行数可能不一样,请大家注意)
注释取消后,保存文件并且退出
step 4. 在php根目录执行命令 ./buildconf --force 这一步以后的文章中进行解释
step 5. 在php源码的根目录编译php程序,注意命令为 ./configure --with-helloworld
step 6. 进入我们的扩张目录helloworld,执行命令 phpize
step 7.在helloworld目录编译我们的扩展 ./configure --with-php-config=/usr/local/bin/php-config(使用你自己环境的php-config) --enable-helloworld
step 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命令重新编译
step 9. 安装我们的扩展
有些同学可能知道,php的程序可以使用make install进行安装,但是为了更好的理解php的工作原理,
我们采用手动安装php扩展的方式进行安装,其实php的安装非常简单
step 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 cp modules/helloworld.so /usr/lib/php5/20090626+lfs 目录 /usr/lib/php5/20090626+lfs需要根据自己的实际情况作出改动
step 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
step 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程序了。
step 11. 进入扩展helloworld目录,编辑文件php_helloworld.h,在最后一行添加函数 PHP_FUNCTION(fun_helloworld);
step 12.在helloworld.c中实现我们的函数
将fun_helloworld函数加入到helloworld_functions[]中
step 13. 编译扩展 make
step 14.按照step 9-2 重新安装我们的扩展
step 15.验证扩展函数
php -r "echo fun_helloworld();"
如果一切顺利的话,你就可以看到我们的问候语句了Hello World !
写在后面的话:也许你按照我的步骤走到最后,你看到了我们的问候语hello world,也许你没有,但是我已经尽力的把开发的过程描述的尽量详细,请大家勿要骂我。其实做程序开发的过程就是一个不断解决问题的过程,如果你在我上面的步骤中遇到了问题,那么我要恭喜你,因为你得到一个提高自己能力的机会。在解决问题的过程中,百度、谷歌是我们最好的帮手,虽然你也可以通过其他教程或者官方文档解决问题,但是百度、谷歌对于新手来说却是最快解决问题的方式。
说了这么多,无非是想告诉大家:不要害怕在学习的过程中遇到问题,因为这些问题才是我们进步的基石。