一个简单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 相关文章推荐
一个简单的自动发送邮件系统(一)
Oct 09 PHP
php目录管理函数小结
Sep 10 PHP
PHP生成带有雪花背景的验证码
Sep 28 PHP
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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捕获Fatal error错误的方法
2014/06/11 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Java及python正则表达式详解
2017/12/27 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
wxpython实现图书管理系统
2018/03/12 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
英文版银行求职信
2013/10/09 职场文书
超市业务员岗位职责
2013/12/05 职场文书
自荐书模板
2013/12/15 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
有关环保的标语
2014/06/13 职场文书
计生工作先进事迹
2014/08/15 职场文书
自我管理的活动方案
2014/08/25 职场文书
学校捐款活动总结
2015/05/09 职场文书
检讨书格式
2019/04/25 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers