一个简单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 调用远程url的六种方法小结
Nov 02 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
Joomla使用Apache重写模式的方法
May 04 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
PHP递归的三种常用方式
Feb 28 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
php中的三元运算符使用说明
2011/07/03 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
Python中下划线的使用方法
2015/03/27 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
C#笔试题
2015/07/14 面试题
请假条怎么写
2014/04/10 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
老龙头导游词
2015/02/11 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS