php-memcached 擴充套件升級小記
今天無意中在工作郵箱翻到了一封郵件,說的是2017年底php-memcached擴充套件的一個安全漏洞(https://github.com/php-memcached-dev/php-memcached/issues/339),由於當時線上業務並沒受影響,所以就沒太關注。今天突然發現自己開發機使用的還是php-memcache擴充套件,所以就升級了一下(centos/apache/php5.6環境)。
php-memcached和
php-memcache
擴充套件都是php的memcached客戶端擴充套件,僅有一字之差,建議使用php-memcached擴充套件,關於兩者的比較,後續有機會我再學習。在開發機升級後,就順帶在自己的阿里雲ECS上也升級了下(ubuntu/php7.1),事情雖小,但自己也學習了很多,主要包括pecl、libmemcachd、phpize等知識,然後寫下了此文。
libmemcachd和php-memcached版本
php-memcached擴充套件是基於libmemcached開發的,核心的功能都來源於libmemcached,libmemcachd是一個C語言開發的庫,這個庫比較穩定,最新的版本是2014年釋出的1.0.18。
php-memcached不管是原始碼編譯還是包安裝,基本上都是由PECL(https://pecl.php.net/package/memcached,/usr/share/doc/php-memcached/README.markdown)提供的,主要分為兩個版本:
-
3.x版本:提供給php5.6以上的版本(包括php7)使用,依賴libmemcached 1.x以上的版本。
-
2.x版本:提供給php5.6一下的版本使用,依賴libmemcached 0.44以上的版本。
至於什麼是PECL,它其實類似於PHP的擴充套件軟體安裝庫,也類似於apt-get這樣的軟體安裝工具,只是PECL安裝的是php擴充套件(大部分是.so檔案)。
PECL安裝php-memcached
在開發機上,我嘗試使用pecl安裝,由於php環境是5.6,所以安裝的是php-memcached 2.x版本,執行一個命令即可:
# 自動安裝libmemcached依賴 $ pecl install php-memcached-2.0.0
這個命令隱藏了很多細節,相當於執行如下指令:
# 也可以自行去github下載(比如https://github.com/php-memcached-dev/php-memcached/releases/tag/r2.1.0) $ pecl download memcached-2.0.0.tgz $ tar xvf memcached-2.0.0.tgz $ cd memcached-2.0.0 $ phpize # 如果libmemcached沒有安裝,需要安裝 $ ./configure --with-libmemcached-dir=/usr $ make $ make install
安裝完成後,如果下列提示:
configuration option “php_ini” is not set to php.ini location You should add “extension=memcached.so” to php.ini
需要自行在php.ini中新增extension=memcached.so,或者在專門的配置檔案增加擴充套件so檔案,比如:
$ echo "extension=memcached.so" >>/etc/php.d/memcached.ini
apt-get安裝php-memcached
一般情況下,我喜歡使用包安裝方式安裝軟體,在自己的ECS我就採用apt-get安裝php-memcached。
輸入下列命令搜尋php-memcached:
$ apt-cacheshow php7.1-memcached
會提示:
N: Can't select versions from package 'php7.1-memcached' as it is purely virtual N: No packages found
間接說明php-memcached其實挺簡單的,不用刻意根據php版本尋找,直接輸入以下命令即可:
$ apt-cache policyphp-memcached
輸出如下:
*** 3.0.4+2.2.0-3+ubuntu14.04.1+deb.sury.org+1 0 990 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main amd64 Packages 100 /var/lib/dpkg/status
然後檢視該擴充套件的資訊:
$ apt-cache show php-memcached
關鍵輸出如下:
Maintainer: Debian PHP PECL Maintainers <[email protected]> Architecture: amd64 Version: 3.0.4+2.2.0-3+ubuntu14.04.1+deb.sury.org+1 Provides: php5.6-memcached, php7.0-memcached, php7.1-memcached, php7.2-memcached, php7.3-memcached
可見,這個安裝包還是很智慧的,php5.6都可以使用該包安裝php-memcached擴充套件。
然後安裝就很簡單了:
$ apt-get install php-memcached
它會自動安裝libmemcachd擴充套件,在我的ECS安裝的是php-memcached 3.0.4版本,libmemcachd採用最新的1.0.18版本。
安裝後,會自行配置對應SAPI的memcached.ini檔案,也會自動重啟對應的apache或nginx,非常方便,完全是自動化安裝。
如果感興趣也可以輸入下列命令檢視php-memcached安裝了那些檔案:
$ dpkg -L php-memcached
我最近寫了一本新書 ofollow,noindex">《深入淺出HTTPS:從原理到實戰》 ,本書github地址 https://github.com/ywdblog/httpsbook,大家可以一起討論。
本書豆瓣地址 https://book.douban.com/subject/30250772/(或點選文末“閱讀原文”),如果你讀了本書,還請寫個評論。
也可以關注我的公眾號(ID: yudadanwx, 虞大膽的嘰嘰喳喳)。