一个简单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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP 面向对象详解
Sep 13 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
smarty中post用法实例
Nov 28 PHP
PHP命名空间和自动加载类
Apr 03 PHP
实现PHP搜索加分页
Oct 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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的curl开启问题探讨
2014/04/08 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
九种原生js动画效果
2015/11/11 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
python实现杨辉三角思路
2017/07/14 Python
PyTorch实现AlexNet示例
2020/01/14 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
如何解决安装python3.6.1失败
2020/07/01 Python
python集合的新增元素方法整理
2020/12/07 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
不打扫卫生检讨书
2014/02/12 职场文书
对学校的意见和建议
2015/06/04 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书