一个简单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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
利用PHP实现短域名互转
Jul 05 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
php网页病毒清除类
Dec 08 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 PHP
Yii框架表单模型和验证用法
May 20 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php getsiteurl()函数
2009/09/05 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
深入了解Python数据类型之列表
2016/06/24 Python
Python实现图片转字符画的示例
2017/08/22 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
C语言开发工程师测试题
2016/12/20 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
2014年维稳工作总结
2014/11/18 职场文书
期末复习计划
2015/01/19 职场文书
英语邀请函范文
2015/02/02 职场文书
培训感想范文
2015/08/07 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python