PHP取得成功的一個主要原因之一是她擁有大量的可用擴展。web開發者無論有何種需求,這種需求最有可能在PHP發行包里找到。PHP發行包包括 " /> 亚洲精品国偷拍电影自产在线,香蕉99久久久久成人麻豆,亚洲精品无码葡京AV天堂

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

用C/C++擴展你的PHP 為你的php增加功能

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

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

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

如果以上的兩個理由都和你沒什么關系,同時你感覺自己沒有冒險精神,那么你可以跳過本章。

本章教你如何編寫相對簡單的php擴展,使用一部分擴展API函數。對于大多數打算開發自定義php擴展開發者而言,它含概了足夠的資料。學習一門編程課程的最好方法之一就是動手做一些極其簡單的例子,這些例子正是本章的線索。一旦你明白了基礎的東西,你就可以在互聯網上通過閱讀文擋、原代碼或參加郵件列表新聞組討論來豐富自己。因此,本章集中在讓你如何開始的話題。在UNIX下一個叫ext_skel的腳本被用于建立擴展的骨架,骨架信息從一個描述擴展接口的定義文件中取得。因此你需要利用UNIX來建立一個骨架。Windows開發者可以使用Windows ext_skel_win32.php代替ext_skel。

然而,本章關于用你開發的擴展編譯php的指導僅涉及UNIX編譯系統。本章中所有的對API的解釋與UNIX和Windows下開發的擴展都有聯系。

當你閱讀完這章,你能學會如何

•建立一個簡單的商業邏輯擴展。
•建議個C函數庫的包裹擴展,尤其是有些標準C文件操作函數比如fopen()
快速開始
本節沒有介紹關于腳本引擎基本構造的一些知識,而是直接進入擴展的編碼講解中,因此不要擔心你無法立刻獲得對擴展整體把握的感覺。假設你正在開發一個網站,需要一個把字符串重復n次的函數。下面是用php寫的例子:

復制代碼 代碼如下:
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".


假設由于一些奇怪的原因,你需要時常調用這個函數,而且還要傳給函數很長的字符串和大值n。這意味著在腳本里有相當巨大的字符串連接量和內存重新分配過程,以至顯著地降低腳本執行速度。如果有一個函數能夠更快地分配大量且足夠的內存來存放結果字符串,然后把$string重復n次,就不需要在每次循環迭代中分配內存。

為擴展建立函數的第一步是寫一個函數定義文件,該函數定義文件定義了擴展對外提供的函數原形。該例中,定義函數只有一行函數原形self_concat() :

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


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

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

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

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


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

•作為一個可裝載模塊或者DSO(動態共享對象)
•靜態編譯到php

php擴展開發導圖

因為第二種方法比較容易上手,所以本章采用靜態編譯。如果你對編譯可裝載擴展模塊感興趣,可以閱讀php原代碼根目錄下的README.SELF-CONTAINED_EXTENSIONS文件。為了使擴展能夠被編譯,需要修改擴展目錄ext/myfunctions/下的config.m4文件。擴展沒有包裹任何外部的C庫,你需要添加支持 主站蜘蛛池模板: 婚后被调教当众高潮H喷水 回复术士勇者免费观看全集 | 亚洲国产黄色 | 精品国产成人系列 | 亚洲性夜夜色综合网站 | 德国美女密密麻麻浓毛 | 思思久99久女女精品 | 美女胸禁止18以下看 | 在线免费观看亚洲视频 | 好姑娘BD高清在线观看免费 | 无码天堂亚洲内射精品课堂 | 亚洲国产高清视频在线观看 | 亚洲妈妈精品一区二区三区 | 攻把受做得合不拢腿play | 亚洲欧美日韩中字视频三区 | 亚洲 日韩 自拍 视频一区 | 丰满人妻按磨HD | 含羞草传媒在线观看 | 青草精品国产福利在线视频 | 女朋友的妈妈在线观看 | 人人在线碰碰视频免费 | 亚洲AV久久无码精品九九软件 | 国产51麻豆二区精品AV视频 | 果冻传媒在线观看完整版免费 | 玩弄放荡人妻一区二区三区 | 中文字幕欧美日韩VA免费视频 | 欧美亚洲另类图片 | 国产精品亚洲专区在线播放 | 国产精品色吧国产精品 | 欧美亚洲日韩自拍高清中文 | 国产真实乱对白精彩 | 蜜臀久久99精品久久久久久做爰 | 人人在线碰碰视频免费 | 欧美亚洲国产免费高清视频 | 精品国产在天天线在线麻豆 | 欧美乱码卡一卡二卡四卡免费 | 2018高清国产一区二区三区 | 国产人妻精品无码AV在线五十路 | 久久天天婷婷五月俺也去 | 中国老太性色xxxxxhd | 亚洲天堂2017无码 | 5G在线观看免费年龄确认18 |