一个简单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之第二天
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
php中in_array函数用法分析
Nov 15 PHP
yii的CURD操作实例详解
Dec 04 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
php给数组赋值的实例方法
Sep 26 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 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中的登陆login实例代码
2016/06/20 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
动手学习无线电
2021/03/10 无线电
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python微信公众号开发平台
2018/01/25 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
工程班组长岗位职责
2013/12/30 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
如何写好建议书
2014/03/13 职场文书
踏青活动策划方案
2014/08/19 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书