一個簡單php擴(kuò)展介紹與開發(fā)教程
更新時間:2010年08月19日 22:05:23 作者:
這個擴(kuò)展早就寫好了,只是一直沒有時間寫在blog上面,今天抽點(diǎn)時間,將它記錄下來,以后備用。
我們使用php擴(kuò)展,主要目的是提高程序的執(zhí)行效率,對于訪問量很大的代碼或者邏輯將其寫成擴(kuò)展。在做項目的過程中,需要對數(shù)據(jù)進(jìn)行排序,數(shù)據(jù)運(yùn)算比較復(fù)雜;我們準(zhǔn)備對一百萬個數(shù)據(jù)進(jìn)行排序, 下面是我在程序之前做的一個測試:首先使用php程序生成一百萬的隨機(jī)數(shù),并將其保存在文件中。
生成隨即數(shù)的代碼如下面所示:
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自身帶的排序函數(shù),以及自己擴(kuò)展的排序函數(shù),它們所需時間如下所示:

下面將php代碼展示一下,需要說明的是:hello函數(shù)時自己寫的擴(kuò)展
<?php
ini_set("memory_limit", -1);
set_time_limit(0);
include_once('data.php'); //剛才產(chǎn)生的隨機(jī)數(shù)保存在這個文件
$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 "系統(tǒng)排序函數(shù)使用時間為: " . ($q_t-$s_t) . "<br>";
echo "本地排序函數(shù)使用時間為: " . ($r_t-$q_t) . "<br>";
echo "兩個結(jié)果的對比:" . ($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);
}
?>
很簡單吧, 多的不說啦,下面說說這個擴(kuò)展的開發(fā)
生成 擴(kuò)展有一定的步驟,網(wǎng)上都有很講解,我這里也不再羅嗦,
首先使用php的庫文件生成一個基本的擴(kuò)展項目

生成的項目,
修改sort.c,將自己的快排寫進(jìn)去, 我這邊的代碼是將php程序的快速排序改成c語言。生成dll后,將其放在php擴(kuò)展中,首先檢查一下是否已將啟用擴(kuò)展。
然后 在代碼中直接使用hello函數(shù)(我這里沒有改函數(shù)名)
注意:擴(kuò)展一定要考慮全面,不能在使用中出錯,特別是C寫的代碼,否則會出現(xiàn)php系統(tǒng)崩潰
生成隨即數(shù)的代碼如下面所示:
復(fù)制代碼 代碼如下:
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自身帶的排序函數(shù),以及自己擴(kuò)展的排序函數(shù),它們所需時間如下所示:

下面將php代碼展示一下,需要說明的是:hello函數(shù)時自己寫的擴(kuò)展
復(fù)制代碼 代碼如下:
<?php
ini_set("memory_limit", -1);
set_time_limit(0);
include_once('data.php'); //剛才產(chǎn)生的隨機(jī)數(shù)保存在這個文件
$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 "系統(tǒng)排序函數(shù)使用時間為: " . ($q_t-$s_t) . "<br>";
echo "本地排序函數(shù)使用時間為: " . ($r_t-$q_t) . "<br>";
echo "兩個結(jié)果的對比:" . ($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);
}
?>
很簡單吧, 多的不說啦,下面說說這個擴(kuò)展的開發(fā)
生成 擴(kuò)展有一定的步驟,網(wǎng)上都有很講解,我這里也不再羅嗦,
首先使用php的庫文件生成一個基本的擴(kuò)展項目

生成的項目,
修改sort.c,將自己的快排寫進(jìn)去, 我這邊的代碼是將php程序的快速排序改成c語言。生成dll后,將其放在php擴(kuò)展中,首先檢查一下是否已將啟用擴(kuò)展。
然后 在代碼中直接使用hello函數(shù)(我這里沒有改函數(shù)名)
注意:擴(kuò)展一定要考慮全面,不能在使用中出錯,特別是C寫的代碼,否則會出現(xiàn)php系統(tǒng)崩潰
您可能感興趣的文章:
- PHP擴(kuò)展開發(fā)教程(總結(jié))
- PHP擴(kuò)展開發(fā)入門教程
- PHP內(nèi)核介紹及擴(kuò)展開發(fā)指南—基礎(chǔ)知識
- 初步介紹PHP擴(kuò)展開發(fā)經(jīng)驗分享
- PHP7擴(kuò)展開發(fā)教程之Hello World實(shí)現(xiàn)方法示例
- PHP7擴(kuò)展開發(fā)之基于函數(shù)方式使用lib庫的方法詳解
- PHP7擴(kuò)展開發(fā)之hello word實(shí)現(xiàn)方法詳解
- 快速開發(fā)一個PHP擴(kuò)展圖文教程
- 詳解Window7 下開發(fā)php擴(kuò)展
- 關(guān)于嘗試開發(fā)PHP的MYSQL擴(kuò)展的使用
- windows下開發(fā)并編譯PHP擴(kuò)展的方法
- php擴(kuò)展開發(fā)入門demo示例
相關(guān)文章
《Head First 設(shè)計模式》代碼之PHP版(面向?qū)ο髮W(xué)習(xí))
《Head First 設(shè)計模式》是本不錯的講解設(shè)計模式的書,不像F4寫的那么枯燥,應(yīng)該算是比較容易理解的好書。2010-06-06php curl優(yōu)化下載微信頭像的方法總結(jié)
這篇文章主要給大家介紹了關(guān)于php curl優(yōu)化下載微信頭像的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09配置eAccelerator和XCache擴(kuò)展來加速PHP程序的執(zhí)行
這篇文章主要介紹了配置eAccelerator和XCache擴(kuò)展來加速PHP程序的執(zhí)行的方法,XCache和PHP5.5以來自帶的Zend Opcache一樣都是在共享內(nèi)存中存儲Opcode的緩存器,需要的朋友可以參考下2015-12-12有關(guān)于PHP中常見數(shù)據(jù)類型的匯總分享
本文整理了有關(guān)于PHP中常見的數(shù)據(jù)類型,感興趣的朋友可以參考下2014-01-01PHP排序算法之簡單選擇排序(Simple Selection Sort)實(shí)例分析
這篇文章主要介紹了PHP排序算法之簡單選擇排序(Simple Selection Sort),結(jié)合實(shí)例形式較為詳細(xì)的分析了簡單選擇排序算法的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04