一个简单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获取当前文件所在目录 getcwd()函数
May 13 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 PHP
php读取文件内容的方法汇总
Jan 24 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP加密解密类实例代码
Jul 20 PHP
php微信开发之百度天气预报
Nov 18 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
PHP哈希表实现算法原理解析
Dec 11 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
php实现图片添加水印功能
2014/02/13 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python中多线程及程序锁浅析
2015/01/21 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
《寓言两则》教学反思
2014/02/27 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
暑期教师培训方案
2014/06/07 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers