如何用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
相关文档:
查找mysql_pconnect时在mysql帮助文档上发现的,记在这里。
web server使用php生成一个web页面的三式有以下三种:
一:把PHP作为CGI Wrapper。这种方式下,每个到达web server的请求都会导致一个php解析器进程被创建,当这个php页面执行结束时,这个php解析器进程终止。
二:
在多进程的web server中,把php作为web
se ......
Technorati 标签: C++ 原文地址:http://www.byvoid.com/blog/c-int64/ 在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf ......
最近在写一个 前台基于 javascript. 的客户端 服务器端PHP 的分析系统。
原先计划使用XML为数据交互基础 但是最终还是选用较轻量级的JSON最为数据交互基础。
首先介绍json的格式
json 说简单其实是一种数据格式 更简单的可以看做简单的数组。
实例 (一)
<script>
var jsonArray=[
......