再議php-memcached擴展的編譯儡循,進一步理解phpize

在寫完《php-memcached擴展升級小記》這篇文章后混滔,總覺得思考的還不夠深入洒疚,所以又仔細學(xué)習(xí)了下,從而對PHP有了進一步的理解遍坟。

《php-memcached擴展升級小記》描述了 PECL 和 apt-get 安裝 php-memcached 擴展(其他的php擴展類似)的方法拳亿,這兩種都屬于比較傻瓜式的方法,隱藏了很多細節(jié)愿伴,一般情況下肺魁,不管采用源代碼編譯還是包安裝方式(比如apt-get)安裝 PHP 后,都面臨一個問題隔节,如果需要安裝一個php擴展鹅经,需要重新編譯嗎?

如果你采用源代碼方式編譯 PHP怎诫,那么可以通過 phpize 來編譯安裝擴展瘾晃,無需重新編譯 PHP ;而如果 PHP 采用包安裝方式幻妓,那么擴展安裝也非常方便蹦误,但內(nèi)部好像并沒有采用了phpize來進行編譯(后面會提到)。

現(xiàn)在重點來了肉津,重點講解 phpize 相關(guān)內(nèi)容强胰,它是一種安裝php擴展的工具,如果想安裝一個php擴展妹沙,但 PECL 沒有支持該擴展偶洋;或者該擴展版本比較高,apt-get包安裝不支持該版本距糖,那么只能通過 phpize 安裝了玄窝。

如何描述 phpize 呢?可以參考:

phpize is a shell script to prepare PHP extension for compiling.

接下去我在ECS(Ubuntu)上講解如何使用 phpize悍引,演示的例子還是php-memcached擴展的安裝恩脂,使用的 PHP 版本是php 7.1,通過 apt-get 安裝趣斤。

看過《php-memcached擴展升級小記》這篇文章的同學(xué)都知道俩块,在 ECS 上我已經(jīng)使用apt安裝了php-memcached擴展,首先先卸載它,然后手動使用phpize重新編譯安裝典阵。

卸載命令如下:

$ apt-get purge php-memcached

注意該命令并不會卸載php-memcached擴展的依賴包libmemcached,如果你也想卸載镊逝,可以執(zhí)行下列命令:

# 尋找依賴
$ apt-cache  depends php-memcached

# 可以看出libmemcached最主要提供了一個.so文件
$ dpkg -L libmemcached11

$ apt-get purge  libmemcached11

接下去尋找php-memcached擴展的源代碼壮啊,腦洞一下,如果你想安裝一個其他的php擴展撑蒜,也可以去特定的倉庫尋找歹啼,php-memcached的包可以在 https://github.com/php-memcached-dev 找到。

執(zhí)行下列命令:

$ git clone https://github.com/php-memcached-dev/php-memcached memcached
$ cd memcached/
$ phpize

在我的ECS上運行上列命令座菠,顯示 phpize 不存在狸眼,這也說明我使用apt-get安裝php的時候,并沒有提供phpize浴滴,那么如何安裝 phpize 呢拓萌?

其實它由php7.1-dev包(php7.2,則是php7.2-dev升略,以此類推)提供微王,執(zhí)行下列命令:

$ apt-get install php7.1-dev

php7.1-dev這個包定義如下:

This package provides the files from the PHP7.1 source needed for compiling
additional modules.

直白的說,提供了一些編譯環(huán)境品嚣,主要包含的兩個工具是php-config7.1和phpize7.1炕倘。

php-config7.1顯示apt-get安裝php7.1采用的編譯參數(shù),可以執(zhí)行下看看輸出翰撑。phpize則是本文講解的重點罩旋,有了phpize執(zhí)行環(huán)境后,接著運行:

$ /usr/bin/phpize7.1

# 配置參數(shù)眶诈,需要鏈接libmemcached
$ ./configure  --with-libmemcached-dir=/usr/lib/x86_64-linux-gnu

還是會提示錯誤涨醋,手動查看/usr/lib/x86_64-linux-gnu/libmemcached.so.11 文件也存在啊,這個so是由apt-get install libmemcached11提供的册养。

采用phpize編譯东帅,必須連接.h頭文件,為了提供libmemcahced對應(yīng)的頭文件球拦,可以執(zhí)行下列命令安裝:

$ apt-get install libmemcached-dev 

# 可以看到 /usr/include/libmemcached/memcached.h 頭文件
$ dpkg -L libmemcached-dev 

現(xiàn)在妥妥的再一次執(zhí)行:

$ ./configure  --with-libmemcached-dir=/usr/lib/x86_64-linux-gnu

可還是報錯...靠闭,原因在于phpize要去php-memcached源代碼目錄尋找libmemcached的.h頭文件,執(zhí)行下令命令就能解決:

$ mkdir -p /usr/lib/x86_64-linux-gnu/include/libmemcached/
$ ln -s /usr/include/libmemcached/memcached.h /usr/lib/x86_64-linux-gnu/include/libmemcached/memcached.h
$ ./configure  --with-libmemcached-dir=/usr/lib/x86_64-linux-gnu
$ make 
$ make install

成功編譯后坎炼,安裝的php-memcached擴展存儲在 /etc/php/7.1/mods-available 目錄下愧膀,那么如何啟用php-memcached呢?不用手動配置谣光,一個命令就能夠解決:

# 可以對php所有的sapi(cli檩淋、php-fpm等等)啟用該模塊
$ phpenmod php-memcached

phpenmod 來源于哪兒呢?php7.1-common 包提供了很多有用的命令,比如:

$ phpdismod php-memcached
$ phpquery -v 7.1 -s cli -M  

基本上講完了蟀悦,學(xué)到哪兒就說到哪兒媚朦,進一步理解了phpize,當(dāng)然還有很多知識待學(xué)習(xí)日戈,比如php編譯到底發(fā)生了什么询张?phpize內(nèi)部到底怎么運作的,有機會我還會持續(xù)分享的浙炼。


【這篇文章于2018-10-17號發(fā)表于公眾號,地址https://mp.weixin.qq.com/s/v2FvcJd_SDob19ToXxLWIA份氧,也可以關(guān)注我的公眾號(ID:yudadanwx,虞大膽的嘰嘰喳喳)】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弯屈,一起剝皮案震驚了整個濱河市蜗帜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌资厉,老刑警劉巖厅缺,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宴偿,居然都是意外死亡店归,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門酪我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來消痛,“玉大人,你說我怎么就攤上這事都哭≈壬。” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵欺矫,是天一觀的道長纱新。 經(jīng)常有香客問我,道長穆趴,這世上最難降的妖魔是什么脸爱? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮未妹,結(jié)果婚禮上簿废,老公的妹妹穿的比我還像新娘。我一直安慰自己络它,他們只是感情好族檬,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著化戳,像睡著了一般单料。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天扫尖,我揣著相機與錄音白对,去河邊找鬼。 笑死换怖,一個胖子當(dāng)著我的面吹牛躏结,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狰域,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼黄橘!你這毒婦竟也來了兆览?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤塞关,失蹤者是張志新(化名)和其女友劉穎抬探,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帆赢,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡小压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椰于。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怠益。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘾婿,靈堂內(nèi)的尸體忽然破棺而出蜻牢,到底是詐尸還是另有隱情,我是刑警寧澤偏陪,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布抢呆,位于F島的核電站,受9級特大地震影響笛谦,放射性物質(zhì)發(fā)生泄漏抱虐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一饥脑、第九天 我趴在偏房一處隱蔽的房頂上張望恳邀。 院中可真熱鬧,春花似錦灶轰、人聲如沸轩娶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄抒。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間许溅,已是汗流浹背瓤鼻。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贤重,地道東北人茬祷。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像并蝗,于是被迫代替她去往敵國和親祭犯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 站在那一大堆的人前面滚停,在猜想他們現(xiàn)在想些什么呢沃粗,是欣喜,是后悔键畴,是恐懼最盅,是忐忑。走向圖書館起惕,臺階上涡贱,突然一念,身為...
    風(fēng)在睡覺閱讀 194評論 0 0
  • 一惹想、作業(yè)是否做了问词? 作業(yè)已完成。 二嘀粱、孩子有哪些變化戏售? 做作業(yè)有主動的時候了,能夠記住自己承諾的事兒草穆,會主...
    王鵬90天踐行閱讀 141評論 0 0
  • 電視里悲柱,常常有這番情節(jié):家里來了客人锋喜,主人因為覺得房子太小覺得寒酸,總是說豌鸡,我們這太小哪像個家嘿般。 房子多大才能算是...
    暮沄閱讀 994評論 3 51