编写PHP扩展篇
Linux环境下编写:
1. 下载php源码:www.php.net下载php-5.4.5版本。(php-5.4.5-src.zip)
解压到home/hjn/php-5.4.5-src 目录下。
(命令:unzip -d /home/hjn/ Downloads/php-5.4.5-src.zip)
2. 环境: 源码PHP 5.4.5 运行php环境php 5.3.5 ubuntu7.10
3. 到源码包的ext目录下(cd /home/hjn/php-5.4.5-src/ext).
4. 执行:./ext_skel --extname=myso
注:ext_skel 可能为只读文件。用(sudo chmod 777 ext_skel )修改文件权限。
成功后如下图:
可看到在ext目录下多了myso这个模块文件夹。
5. 进入myso目录下编写,(cd myso)。
6. 修改config.m4
修改(将dnl去掉)
PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
[ --with-myext Include myext support])
或者
PHP_ARG_ENABLE(myext, whether to enable myext support,
dnl Make sure that the comment is aligned:
[ --enable-myext Enable myext support])
7. 用phpize生成配置文件。
可能提示未安装phpize,根据提示安装了就行。Sudo apt-get install php5-dev.
成功如图:
8. 编写第一个输出HelloWorld函数。
1) 修改php_myso.h
找到PHP_FUNCTION(confirm_extest_compiled); 在下面添加
PHP_FUNCTION(myso);
保存退出
强制保存命令(w !sudo tee %)
2) 修改myso.c
找到const zend_function_entry extest_functions[]
在PHP_FE_END上面添加
PHP_FE(myso, NULL)
注:看网上资料不用改PHP_FE_END ,但是我每次都报错。所以如果报错改成{NULL,NULL,NULL}就好了
最后在文件最后编写函数内容.
PHP_FUNCTION(myso)
{
Php_printf("HelloWorld");
}
保存退出。
9.编译
命令:./configure --with-myso
如果报错,可能config.m4没改好。
Make
报错,根据报错修改.h和.c文件
最后,安装
Sudo Make install
10.修改php.ini文件
找不到该文件可以运行命令 locate php.ini寻找。或运行php文件phpinfo().里面有详细信息。
添加extension=myso.so
最后重启apache
11.测试
编写test.php文件
<?php
myso();
phpinfo();
?>
运行,输出:
HelloWorld
成功!!!
有问题可发邮箱:993324512@qq.com。一起学习^ ^.