PHP取得成功的一個(gè)主要原因之一是她擁有大量的可用擴(kuò)展。web開(kāi)發(fā)者無(wú)論有何種需求,這種需求最有可能在PHP發(fā)行包里找到。PHP發(fā)行包包括 " /> 欧美jizzhd精品欧美另类,亚洲成人中文,91麻豆精品一二三区在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

用C/C++擴(kuò)展你的PHP 為你的php增加功能

英文版下載: php 5 Power Programming http://www.jb51.NET/books/61020.html

php取得成功的一個(gè)主要原因之一是她擁有大量的可用擴(kuò)展。web開(kāi)發(fā)者無(wú)論有何種需求,這種需求最有可能在php發(fā)行包里找到。php發(fā)行包包括支持各種數(shù)據(jù)庫(kù),圖形文件格式,壓縮,XML技術(shù)擴(kuò)展在內(nèi)的許多擴(kuò)展。
擴(kuò)展API的引入使php3取得了巨大的進(jìn)展,擴(kuò)展API機(jī)制使php開(kāi)發(fā)社區(qū)很容易的開(kāi)發(fā)出幾十種擴(kuò)展。現(xiàn)在,兩個(gè)版本過(guò)去了,API仍然和php3時(shí)的非常相似。擴(kuò)展主要的思想是:盡可能的從擴(kuò)展編寫(xiě)者那里隱藏php的內(nèi)部機(jī)制和腳本引擎本身,僅僅需要開(kāi)發(fā)者熟悉API。

有兩個(gè)理由需要自己編寫(xiě)php擴(kuò)展。第一個(gè)理由是:php需要支持一項(xiàng)她還未支持的技術(shù)。這通常包括包裹一些現(xiàn)成的C函數(shù)庫(kù),以便提供php接口。例如,如果一個(gè)叫FooBase的數(shù)據(jù)庫(kù)已推出市場(chǎng),你需要建立一個(gè)php擴(kuò)展幫助你從php里調(diào)用FooBase的C函數(shù)庫(kù)。這個(gè)工作可能僅由一個(gè)人完成,然后被整個(gè)php社區(qū)共享(如果你愿意的話)。第二個(gè)不是很普遍的理由是:你需要從性能或功能的原因考慮來(lái)編寫(xiě)一些商業(yè)邏輯。

如果以上的兩個(gè)理由都和你沒(méi)什么關(guān)系,同時(shí)你感覺(jué)自己沒(méi)有冒險(xiǎn)精神,那么你可以跳過(guò)本章。

本章教你如何編寫(xiě)相對(duì)簡(jiǎn)單的php擴(kuò)展,使用一部分?jǐn)U展API函數(shù)。對(duì)于大多數(shù)打算開(kāi)發(fā)自定義php擴(kuò)展開(kāi)發(fā)者而言,它含概了足夠的資料。學(xué)習(xí)一門(mén)編程課程的最好方法之一就是動(dòng)手做一些極其簡(jiǎn)單的例子,這些例子正是本章的線索。一旦你明白了基礎(chǔ)的東西,你就可以在互聯(lián)網(wǎng)上通過(guò)閱讀文擋、原代碼或參加郵件列表新聞組討論來(lái)豐富自己。因此,本章集中在讓你如何開(kāi)始的話題。在UNIX下一個(gè)叫ext_skel的腳本被用于建立擴(kuò)展的骨架,骨架信息從一個(gè)描述擴(kuò)展接口的定義文件中取得。因此你需要利用UNIX來(lái)建立一個(gè)骨架。Windows開(kāi)發(fā)者可以使用Windows ext_skel_win32.php代替ext_skel。

然而,本章關(guān)于用你開(kāi)發(fā)的擴(kuò)展編譯php的指導(dǎo)僅涉及UNIX編譯系統(tǒng)。本章中所有的對(duì)API的解釋與UNIX和Windows下開(kāi)發(fā)的擴(kuò)展都有聯(lián)系。

當(dāng)你閱讀完這章,你能學(xué)會(huì)如何

•建立一個(gè)簡(jiǎn)單的商業(yè)邏輯擴(kuò)展。
•建議個(gè)C函數(shù)庫(kù)的包裹擴(kuò)展,尤其是有些標(biāo)準(zhǔn)C文件操作函數(shù)比如fopen()
快速開(kāi)始
本節(jié)沒(méi)有介紹關(guān)于腳本引擎基本構(gòu)造的一些知識(shí),而是直接進(jìn)入擴(kuò)展的編碼講解中,因此不要擔(dān)心你無(wú)法立刻獲得對(duì)擴(kuò)展整體把握的感覺(jué)。假設(shè)你正在開(kāi)發(fā)一個(gè)網(wǎng)站,需要一個(gè)把字符串重復(fù)n次的函數(shù)。下面是用php寫(xiě)的例子:

復(fù)制代碼 代碼如下:
function self_concat($string, $n){
$result = "";
for($i = 0; $i < $n; $i++){
$result .= $string;
}
return $result;
}
self_concat("One", 3) returns "OneOneOne".
self_concat("One", 1) returns "One".


假設(shè)由于一些奇怪的原因,你需要時(shí)常調(diào)用這個(gè)函數(shù),而且還要傳給函數(shù)很長(zhǎng)的字符串和大值n。這意味著在腳本里有相當(dāng)巨大的字符串連接量和內(nèi)存重新分配過(guò)程,以至顯著地降低腳本執(zhí)行速度。如果有一個(gè)函數(shù)能夠更快地分配大量且足夠的內(nèi)存來(lái)存放結(jié)果字符串,然后把$string重復(fù)n次,就不需要在每次循環(huán)迭代中分配內(nèi)存。

為擴(kuò)展建立函數(shù)的第一步是寫(xiě)一個(gè)函數(shù)定義文件,該函數(shù)定義文件定義了擴(kuò)展對(duì)外提供的函數(shù)原形。該例中,定義函數(shù)只有一行函數(shù)原形self_concat() :

復(fù)制代碼 代碼如下:
string self_concat(string str, int n)


函數(shù)定義文件的一般格式是一個(gè)函數(shù)一行。你可以定義可選參數(shù)和使用大量的php類(lèi)型,包括: bool, float, int, array等。

保存為myfunctions.def文件至php原代碼目錄樹(shù)下。

該是通過(guò)擴(kuò)展骨架(skeleton)構(gòu)造器運(yùn)行函數(shù)定義文件的時(shí)機(jī)了。該構(gòu)造器腳本叫ext_skel,放在php原代碼目錄樹(shù)的ext/目錄下(php原碼主目錄下的README.EXT_SKEL提供了更多的信息)。假設(shè)你把函數(shù)定義保存在一個(gè)叫做myfunctions.def的文件里,而且你希望把擴(kuò)展取名為myfunctions,運(yùn)行下面的命令來(lái)建立擴(kuò)展骨架

復(fù)制代碼 代碼如下:
./ext_skel --extname=myfunctions --proto=myfunctions.de


這個(gè)命令在ext/目錄下建立了一個(gè)myfunctions/目錄。你要做的第一件事情也許就是編譯該骨架,以便編寫(xiě)和測(cè)試實(shí)際的C代碼。編譯擴(kuò)展有兩種方法:

•作為一個(gè)可裝載模塊或者DSO(動(dòng)態(tài)共享對(duì)象)
•靜態(tài)編譯到php

php擴(kuò)展開(kāi)發(fā)導(dǎo)圖

因?yàn)榈诙N方法比較容易上手,所以本章采用靜態(tài)編譯。如果你對(duì)編譯可裝載擴(kuò)展模塊感興趣,可以閱讀php原代碼根目錄下的README.SELF-CONTAINED_EXTENSIONS文件。為了使擴(kuò)展能夠被編譯,需要修改擴(kuò)展目錄ext/myfunctions/下的config.m4文件。擴(kuò)展沒(méi)有包裹任何外部的C庫(kù),你需要添加支持 主站蜘蛛池模板: 中文字幕av在线 | 国产xx在线观看 | 久久婷婷是五月综合色狠狠 | 缴情啪啪三级小说网 | 欧洲成人在线观看 | 精品成人在线视频 | 国产免费私拍一区二区三区 | 久久久久久久久女黄9999 | 国产一级特黄全黄毛片 | 97国产精品人人爽人人做 | 欧洲大胆a级人体 | 一国产大片在线观看 | 亚洲第一中文字幕 | 久久国产网 | 国产欧美一区二区三区观看 | 美女三级福利视频 | 欧美www网站| 日本一区二区视频在线观看 | 中文字幕色综合久久 | 国产区视频在线 | 国产精品人伦久久 | 国产精品第 | 亚洲性在线 | 色播在线播放 | 国产91av在线 | 午夜影院在线免费观看 | 中文字幕不卡一区 二区三区 | 青草国产视频 | 久久亚洲国产成人精品性色 | 色多多视频在线播放 | 7777在线视频 | 四虎新地址4hu 你懂的 | 国产原创中文视频 | 色哟哟精品 | 伊人网视频在线 | 久久中字| 久99久女女精品免费观看69堂 | 91久久精品都在这里 | 欧美a级黄色片 | 欧美日韩国产一区三区 | 国内精品一区二区 |