一个简单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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
PHP新手上路(十四)
Oct 09 PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
10个简化PHP开发的工具
Dec 25 PHP
PHP中余数、取余的妙用
Jun 29 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 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维护文件系统
2006/10/09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
js实现内置计时器
2019/12/16 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
python开发之文件操作用法实例
2015/11/13 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python多进程原理与用法分析
2018/08/21 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
就业意向书范文
2014/04/01 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
2019年思想汇报
2019/06/20 职场文书
Python基础知识学习之类的继承
2021/05/31 Python