php c扩展的方式,如何用C 编写PHP扩展

如何用C 编写PHP扩展

PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。

扩展API的引入使PHP取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展。。扩展主要的思想是:尽可能的从扩展编写者那里隐藏PHP的内部机制和脚本引擎本身,仅仅需要开发者熟悉API。

有两个理由需要自己编写PHP扩展。第一个理由是:PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。例如,如果一个叫FooBase的数据库已推出市场,你需要建立一个PHP扩展帮助你从PHP里调用FooBase的C函数库。这个工作可能仅由一个人完成,然后被整个PHP社区共享(如果你愿意的话)。第二个不是很普遍的理由是:你需要从性能或功能的原因考虑来编写一些商业逻辑。

首先,我们应该选择如何去构建我们的扩展模块, 有三种方式:

1. External Modules

外部模块,也就是编译成共享库,用dl()函数动态加载。

好处: (1)不需要重新编译 PHP (2)PHP体积小,因为不需要编译进PHP

缺点: (1)每次*.php脚本执行都需要用 dl()去加载,效率较低

(2)每次都要调用dl()

2. Built-in Modules

编译进PHP

好处: (1)不需要动态加载,模块在php脚本里面可以直接使用.

(2)不需要将模块编译成.so共享库,因为直接编译进PHP。

缺点: (1)对模块的改变都需要重新编译PHP

(2)因为编译进PHP,所以PHP二进制文件较大,而且多占点内存

3. The Zend Engine

Zend 核心里实现 (略 ... 有兴趣的话可以看 Zend API)

Note: 本人推荐用 第 2 种方式,直接编译进PHP, 但是在下面示例里,我们编译成外部模块

,因为,外部模块不需要重新编译 PHP,所以在测试阶段先编译成共享库,然后用dl()

加载(不过记得在php.ini里将安全模式设为 Off),测试完后再用第2种方式重新编译进 PHP.

1. 首先下载 PHP 源代码, 解压。 然后我们开始构建代码结构,可以利用 PHP 源代码包ext目录里提供的 ext_skel 程序去生成我们需要的结构.

[ext]#./ext_skel --extname=my_php_module

这样会在ext下生成一个 my_php_module目录。

目录里有 config.m4, my_php_module.h, my_php_module.c 等几个文件。

2. my_php_modu

相关文档:

知道差距了,努力吧!

1. Which of the following will not add john to the users array?

1. $users[] = 'john';

2. array_add($users,'john');

3. array_push($users,'john');

4. $users ||= 'john';

2. What's the difference between sort(), asort() and ksort? Under what circumstances would you use each o ......

比如要给用户报告一个错误,用下面的方法:

使用set_error_handler设置自己的错误处理函数,在报错的地方使用trigger_error,在自定义的错误处理函数中给用户显示一个出错信息页面。

是如果调用trigger_error的这个页面是被一次ajax请求触发的,那么ajax返回后将得到一大堆用于显示错误的html代码。而一般

ajax调用� ......

查找mysql_pconnect时在mysql帮助文档上发现的,记在这里。

web server使用php生成一个web页面的三式有以下三种:

一:把PHP作为CGI Wrapper。这种方式下,每个到达web server的请求都会导致一个php解析器进程被创建,当这个php页面执行结束时,这个php解析器进程终止。

二:

在多进程的web server中,把php作为web

se ......

要让 Eclipse 可以开发 C/C++ 程式,要挂上 CDT 才可以。

首先要下载CDT

CDT的最新版本是 3.1.0,它支持eclipse3.2.0,其下载地址:http://download3.eclipse.org/tools/cdt/releases/callisto/dist/3.1.0/,或者是到http://www.eclipse.org/cdt/downloads.php下载其它� ......

/*

* File: main.cpp

* Author: Vicky

*

* Created on 2010年5月8日, 下午2:47

*/

#include

using namespace std;

void swap(int x, int y) {

cout << "x and y swap before : " << x << "\t" << y << endl;

int i = x;

x = y;

y = i; ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值