一个简单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 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
php 删除数组元素
Jan 16 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
php简单压缩css样式示例
Sep 22 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
Laravel 验证码认证学习记录小结
Dec 20 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
15种PHP Encoder的比较
2007/04/17 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
Python 字典(Dictionary)操作详解
2014/03/11 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
英语求职信范文
2014/05/23 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
1000字打架检讨书
2014/11/03 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
中班上学期个人总结
2015/02/12 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
Pandas 数据编码的十种方法
2022/04/20 Python