[PHP] User Defined Extension
来源:互联网 发布:2017年淘宝卖什么最火 编辑:程序博客网 时间:2024/05/22 06:58
为 PHP 添加扩展库是一件简单的事情。不过首先你最好会一点点C/C++编程技术,并且对Makefile有一定的了解。
以下是在 Linux 下的一个简单例子:
首先,进入 php 源代码目录(假设为 PHP_SRC,以下同),使用 php 自带的 ext_skel 工具生成一个新扩展 mk4php:
cd PHP_SRC/etc;
./ext_skel --extname=mk4php
正常情况下您会看到类似这样的输出:
Creating directory mk4php
Creating basic files: config.m4 config.w32 .cvsignore mk4php.c php_mk4php.h CREDITS EXPERIMENTAL tests/001.phpt mk4php.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/mk4php/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-mk4php
5. $ make
6. $ ./php -f ext/mk4php/mk4php.php
7. $ vi ext/mk4php/mk4php.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/mk4php/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
此时会在 ext/ 目录下生成一个以 mk4php 命名的目录,进去看看。
编辑 ext/mk4php/ 目录下面的 config.m4 文件,找到下面三行,删掉前面的 dnl 前缀:
dnl PHP_ARG_WITH(mk4php, for mk4php support,
dnl Make sure that the comment is aligned:
dnl [ --with-mk4php Include mk4php support])
说明:
1. dnl 是注释,删掉表示使改行生效,否则 make 的时候不会生成相应的 modules
2. 也可以使用下面挨着的关于 --enable-mk4php 那三行,两者的区别在于你的扩展是否需要引用外部的库
然后就是 configure; make; make install
configure 的时候,如果你的 apxs 和 php-config 不在默认路径上,则需要指定它们
./configure --with-mk4php --with-apxs=/usr/local/apache/bin/apxs --with-php-config=/usr/local/php/bin/php-config
make
make install
说明:
1. make 成功之后会在 ext/mk4php/modules/ 下生成相应的 .so 文件
2. make install 就是把 modules/* 复制到 php 的 extensions 目录
再下来就是在 php.ini 里添加一行:
extension=mk4php.so
最后检查一下是否安装成功:
./php -f ext/mk4php/mk4php.php
如果上面的步骤都顺利,那开发&测试环境就算搭建成功了,接着你就可以在那个目录下进行开发了
特别地,如果你已经写好了相应的 C/C++ 程序,则只需要修改一下 mk4php.c 和 php_mk4php.h 文件,把你的代码 include 进来,
然后重新编译即可。
比如你写了一个 libmk.a ,则可以通过以下步骤添加进来:
1. vi mk.h
2. vi mk.c
3. vi php_mk4php.h
增加一行
#include "mk.h"
4. vi mk4php.c
找到“zend_function_entry pnr_functions[] = {”,在其下增加相应的函数说明:
PHP_FE(php_func1, NULL)
5. vi Makefile
增加对上述两个文件的依赖,并且把你的 .a 库加上
6. make clean; make; make install
然后写个 php 程序测试一下(修改 php.ini 之后记得重启 apache):
Over.
Good luck! ^_^
- [PHP] User Defined Extension
- Selenium user extension
- PHP Extension
- php extension
- 13.4 User-defined conversions
- User-defined conversions
- User Defined Window Messages
- UDF (User-defined Function)
- python User-defined Exceptions
- User Defined Functions
- gdb user defined command
- User Defined Runtime Attributes
- C++ User-defined Datatypes
- User Defined Runtime Attributes
- User Defined Runtime Attributes
- User Defined Runtime Attributes
- User Defined Runtime Attributes
- User Defined Runtime Attributes
- /proc/{pid}/status 的意义
- Log4j使用指南
- Delphi字符串函数大全
- Windows XP下AVI文件无法直接删除的问题
- example2
- [PHP] User Defined Extension
- 【转】如何迅速地杀掉Oralcle的一些session
- C#中使用Random方法时需要注意的问题
- Curl编程
- 可伸缩性最佳实践:来自eBay的经验
- LINUX nfs 设置分析
- php $_SERVER的参数与说明
- MFC Regular DLL and Usage
- 我来说说chmod (unix command)