ubuntu 下第一个php扩展开发记录
2014-06-23 21:48
525 查看
今天尝试了我的第一个php扩展开发,记录下过程以及遇到的问题
一、环境准备
以前我已经用以下命令安装过php了
[plain] view
plaincopy
$ sudo apt-get install php5
其安装位置是
[plain] view
plaincopy
$ whereis php
php: /usr/bin/php /usr/lib/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
这种方式安装的php并不能直接进行php扩展开发,我们还需要
(1)安装php5-dev,不然没有编译扩展需要的phpize
[plain] view
plaincopy
$ sudo apt-get install php5-dev
[plain] view
plaincopy
$ whereis phpize
phpize: /usr/bin/phpize /usr/bin/X11/phpize /usr/share/man/man1/phpize.1.gz
(2)下载php5源码, 我准备保存在 ~/code/ 目录下
[plain] view
plaincopy
$ cd ~/code/
$ sudo apt-get source php5
下载的文件如下
[plain] view
plaincopy
$ ls
php5-5.4.9 php5_5.4.9-4ubuntu2.dsc
php5_5.4.9-4ubuntu2.debian.tar.gz php5_5.4.9.orig.tar.xz
二、生成扩展骨架文件
进入php的ext目录
[plain] view
plaincopy
$ cd ~/code/php5-5.4.9/ext/
执行一下命令
[plain] view
plaincopy
$ ./ext_skel --extname=xw
发现没有ext下权限没有权限创建目录,于是修改ext目录的权限
[plain] view
plaincopy
$ chmod 0777 ~/code/php5-5.4.9/ext
再次执行
[plain] view
plaincopy
$ ./ext_skel --extname=xw
ext下正常生成了xw目录,但目录中没有c文件,这和网络上教程所说有些不一样啊,仔细看了看命令的输出,发现有些报错说一些文件没有找到
[plain] view
plaincopy
cannot open /skeleton.c: No such file
vim 打开ext_skel文件
搜索“skeleton.c”,得
[plain] view
plaincopy
sed -f sedscript < $skel_dir/skeleton.c > $extname.c
继续搜索“skel_dir”
[plain] view
plaincopy
if test -z "$skel_dir"; then
skel_dir="/usr/lib/php5/<span style="font-family: Arial, Helvetica, sans-serif;">"</span>
fi
原来是这个路径,查看我的电脑确实没有这个目录,那搜索一下是否是在其他地方呢
[plain] view
plaincopy
$ locate /skeleton
/usr/share/php5/skeleton
这个路径应该是可以配置的,试试help看看
[plain] view
plaincopy
$ ./ext_skel --help
./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]
[--skel=dir] [--full-xml] [--no-help]
--extname=module module is the name of your extension
--proto=file file contains prototypes of functions to create
--stubs=file generate only function stubs in file
--xml generate xml documentation to be added to phpdoc-cvs
--skel=dir path to the skeleton directory
--full-xml generate xml documentation for a self-contained extension
(not yet implemented)
--no-help don't try to be nice and create comments in the code
and helper functions to test if the module compiled
明白了,修改原来的命令,增加--skel参数再次执行
[plain] view
plaincopy
$ ./ext_skel --extname=xw --skel=/usr/share/php5/skeleton
ok了,生成的文件正常了
三、编译扩展
进入xw目录 ,vim config.m4 把
[plain] view
plaincopy
dnl PHP_ARG_ENABLE(xw, whether to enable xw support,
dnl Make sure that the comment is aligned:
dnl [ --enable-xw Enable xw support])
这3行前面的“dnl”注释去掉,变成
[plain] view
plaincopy
PHP_ARG_ENABLE(xw, whether to enable xw support,
Make sure that the comment is aligned:
[ --enable-xw Enable xw support])
依次执行
[plain] view
plaincopy
$ phpize
$ ./configure
$ make
$ sudo make install
若执行成功了,会显示
[plain] view
plaincopy
Installing shared extensions: /usr/lib/php5/20100525/
这时你在 /usr/lib/php5/20100525/ 目录找到 xw.so
四、修改php配置,运行检测
修改php.ini 配置文件,把xw.so扩展加入进去(这个就多不多说了)。若你不知道ini文件在哪,可以执行以下命令查看
[plain] view
plaincopy
$ php -ini
重启后,执行
[plain] view
plaincopy
$ php -r 'echo confirm_xw_compiled("xw"),"\n";'
若你能看到如下输出则你的扩展编译安装配置成功了
[plain] view
plaincopy
Congratulations! You have successfully modified ext/xw/config.m4. Module xw is now compiled into PHP.
其实,这句话就是xw.c里面函数返回给php的,你可以找到,并尝试修改它,然后重复 make和make install 步骤
函数confirm_xw_compiled()是扩展骨架自带的一个自定义函数,是一个例子,也可用于检查是否安成功安装了扩展。其中“xw”是扩展名
一、环境准备
以前我已经用以下命令安装过php了
[plain] view
plaincopy
$ sudo apt-get install php5
其安装位置是
[plain] view
plaincopy
$ whereis php
php: /usr/bin/php /usr/lib/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
这种方式安装的php并不能直接进行php扩展开发,我们还需要
(1)安装php5-dev,不然没有编译扩展需要的phpize
[plain] view
plaincopy
$ sudo apt-get install php5-dev
[plain] view
plaincopy
$ whereis phpize
phpize: /usr/bin/phpize /usr/bin/X11/phpize /usr/share/man/man1/phpize.1.gz
(2)下载php5源码, 我准备保存在 ~/code/ 目录下
[plain] view
plaincopy
$ cd ~/code/
$ sudo apt-get source php5
下载的文件如下
[plain] view
plaincopy
$ ls
php5-5.4.9 php5_5.4.9-4ubuntu2.dsc
php5_5.4.9-4ubuntu2.debian.tar.gz php5_5.4.9.orig.tar.xz
二、生成扩展骨架文件
进入php的ext目录
[plain] view
plaincopy
$ cd ~/code/php5-5.4.9/ext/
执行一下命令
[plain] view
plaincopy
$ ./ext_skel --extname=xw
发现没有ext下权限没有权限创建目录,于是修改ext目录的权限
[plain] view
plaincopy
$ chmod 0777 ~/code/php5-5.4.9/ext
再次执行
[plain] view
plaincopy
$ ./ext_skel --extname=xw
ext下正常生成了xw目录,但目录中没有c文件,这和网络上教程所说有些不一样啊,仔细看了看命令的输出,发现有些报错说一些文件没有找到
[plain] view
plaincopy
cannot open /skeleton.c: No such file
vim 打开ext_skel文件
搜索“skeleton.c”,得
[plain] view
plaincopy
sed -f sedscript < $skel_dir/skeleton.c > $extname.c
继续搜索“skel_dir”
[plain] view
plaincopy
if test -z "$skel_dir"; then
skel_dir="/usr/lib/php5/<span style="font-family: Arial, Helvetica, sans-serif;">"</span>
fi
原来是这个路径,查看我的电脑确实没有这个目录,那搜索一下是否是在其他地方呢
[plain] view
plaincopy
$ locate /skeleton
/usr/share/php5/skeleton
这个路径应该是可以配置的,试试help看看
[plain] view
plaincopy
$ ./ext_skel --help
./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]
[--skel=dir] [--full-xml] [--no-help]
--extname=module module is the name of your extension
--proto=file file contains prototypes of functions to create
--stubs=file generate only function stubs in file
--xml generate xml documentation to be added to phpdoc-cvs
--skel=dir path to the skeleton directory
--full-xml generate xml documentation for a self-contained extension
(not yet implemented)
--no-help don't try to be nice and create comments in the code
and helper functions to test if the module compiled
明白了,修改原来的命令,增加--skel参数再次执行
[plain] view
plaincopy
$ ./ext_skel --extname=xw --skel=/usr/share/php5/skeleton
ok了,生成的文件正常了
三、编译扩展
进入xw目录 ,vim config.m4 把
[plain] view
plaincopy
dnl PHP_ARG_ENABLE(xw, whether to enable xw support,
dnl Make sure that the comment is aligned:
dnl [ --enable-xw Enable xw support])
这3行前面的“dnl”注释去掉,变成
[plain] view
plaincopy
PHP_ARG_ENABLE(xw, whether to enable xw support,
Make sure that the comment is aligned:
[ --enable-xw Enable xw support])
依次执行
[plain] view
plaincopy
$ phpize
$ ./configure
$ make
$ sudo make install
若执行成功了,会显示
[plain] view
plaincopy
Installing shared extensions: /usr/lib/php5/20100525/
这时你在 /usr/lib/php5/20100525/ 目录找到 xw.so
四、修改php配置,运行检测
修改php.ini 配置文件,把xw.so扩展加入进去(这个就多不多说了)。若你不知道ini文件在哪,可以执行以下命令查看
[plain] view
plaincopy
$ php -ini
重启后,执行
[plain] view
plaincopy
$ php -r 'echo confirm_xw_compiled("xw"),"\n";'
若你能看到如下输出则你的扩展编译安装配置成功了
[plain] view
plaincopy
Congratulations! You have successfully modified ext/xw/config.m4. Module xw is now compiled into PHP.
其实,这句话就是xw.c里面函数返回给php的,你可以找到,并尝试修改它,然后重复 make和make install 步骤
函数confirm_xw_compiled()是扩展骨架自带的一个自定义函数,是一个例子,也可用于检查是否安成功安装了扩展。其中“xw”是扩展名
相关文章推荐
- ubuntu 下第一个php扩展开发记录
- 记录第一个php扩展开发
- Ubuntu下C++开发PHP开发扩展的注意事项
- PHP扩展开发-01:第一个扩展
- PHP 扩展开发[从零开始编写第一个PHP扩展]
- PHP开发第一个扩展
- Linux/Ubuntu下C语言开发PHP的.so扩展模块过程
- PHP扩展开发 - 实现第一个PHP类
- PHP扩展开发01:第一个扩展【转】
- PHP扩展开发:第一个扩展
- PHP扩展开发:第一个扩展
- [翻译][php扩展开发和嵌入式]第5章-您的第一个扩展
- PHP扩展开发:第一个扩展
- PHP扩展开发-01:第一个扩展
- 在Ubuntu下PHP的使用ssh2扩展开发web
- linux下php扩展(php ext)开发记录
- LINUX下PHP扩展开发:第一个C扩展
- linux下php扩展(php ext)开发记录
- 开发的第一个PHP扩展
- php---第一个扩展开发