一个简单php扩展介绍与开发教程


Posted in PHP onAugust 19, 2010

我们使用php扩展,主要目的是提高程序的执行效率,对于访问量很大的代码或者逻辑将其写成扩展。在做项目的过程中,需要对数据进行排序,数据运算比较复杂;我们准备对一百万个数据进行排序, 下面是我在程序之前做的一个测试:首先使用php程序生成一百万的随机数,并将其保存在文件中。
生成随即数的代码如下面所示:

set_time_limit(0); 
ini_set("memory_limit", -1); 
$data = array(); 
for($i = 1; $i < 1000000; $i++) 
$data[] = rand(); 
file_put_contents('data.php', '<?php $data = ' . var_export($data, true) . "; ?>");

代码很简单,一看就明白,这里不作说明。
下面是使用php写的快速排序,php自身带的排序函数,以及自己扩展的排序函数,它们所需时间如下所示:
一个简单php扩展介绍与开发教程
下面将php代码展示一下,需要说明的是:hello函数时自己写的扩展
<?php 
ini_set("memory_limit", -1); 
set_time_limit(0); 
include_once('data.php'); //刚才产生的随机数保存在这个文件 
$len = count($data); 
$data_s = $data_q = $data; 
$s_s = $s_t = array_sum(explode(" ", microtime())); 
qsort($data, 0, $len-1); 
$s_t = array_sum(explode(" ", microtime())); 
sort($data_s); 
$q_t = array_sum(explode(" ", microtime())); 
$data_q = hello($data_q); 
$r_t = array_sum(explode(" ", microtime())); 
echo "php写的快速排序时间: " . ($s_t-$s_s) . "<br>"; 
echo "系统排序函数使用时间为: " . ($q_t-$s_t) . "<br>"; 
echo "本地排序函数使用时间为: " . ($r_t-$q_t) . "<br>"; 
echo "两个结果的对比:" . ($data_s === $data_q); 
function qsort(&$arr, $l, $u) 
{ 
if($l >= $u) 
return; 
$m = $l; 
for($i = $l+1; $i<=$u; $i++) 
{ 
if($arr[$i] < $arr[$l]) 
{ 
$m++; 
if($m != $i) 
{ 
$t = $arr[$i]; 
$arr[$i] = $arr[$m]; 
$arr[$m] = $t; 
} 
} 
} 
$t = $arr[$l]; $arr[$l] = $arr[$m]; $arr[$m] = $t; 
qsort($arr, $l, $m-1); 
qsort($arr, $m+1, $u); 
} 
?>

很简单吧, 多的不说啦,下面说说这个扩展的开发
生成 扩展有一定的步骤,网上都有很讲解,我这里也不再罗嗦,
首先使用php的库文件生成一个基本的扩展项目
一个简单php扩展介绍与开发教程
生成的项目,

修改sort.c,将自己的快排写进去, 我这边的代码是将php程序的快速排序改成c语言。生成dll后,将其放在php扩展中,首先检查一下是否已将启用扩展。

然后 在代码中直接使用hello函数(我这里没有改函数名)

注意:扩展一定要考虑全面,不能在使用中出错,特别是C写的代码,否则会出现php系统崩溃

PHP 相关文章推荐
php笔记之:数据类型与常量的使用分析
May 14 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
memcache一致性hash的php实现方法
Mar 05 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
php checkbox 取值详细说明
Aug 19 #PHP
PHP 截取字符串专题集合
Aug 19 #PHP
php 过滤器实现代码
Aug 09 #PHP
PHP对字符串的递增运算分析
Aug 08 #PHP
PHP原理之异常机制深入分析
Aug 08 #PHP
php include加载文件两种方式效率比较
Aug 08 #PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 #PHP
You might like
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
两个php日期控制类实例
2014/12/09 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
css配合jquery美化 select
2013/11/29 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
canvas知识总结
2017/01/25 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
python继承和抽象类的实现方法
2015/01/14 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
python单例模式实例解析
2018/08/28 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
python str字符串转uuid实例
2020/03/03 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
超市创意活动方案
2014/08/15 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
中层干部考核评语
2015/01/04 职场文书
南极大冒险观后感
2015/06/05 职场文书
看雷锋电影观后感
2015/06/10 职场文书
婚育证明格式
2015/06/17 职场文书