php memcached 扩展下载,编译安装 PHP 的 Memcached 扩展
image.png
前面章節我會先簡要說明一下安裝過程, 后面章節我會記錄在安裝期間踩過的坑.
Linux 下編譯軟件的步驟參見Linux 編譯軟件的步驟
服務器環境
CentOS 7
PHP 7.0.20
Nginx 1.10.1
安裝 PHP 擴展的通用流程
1.下載解壓
cd /usr/local/src #一般把第三方軟件的源碼放在這個目錄
wget http://xxx.com/ #軟件源碼下載地址
tar -zxvf 壓縮包 #解壓縮. 根據不同類型的壓縮包,使用不同的解壓縮命令, 比如 ".gz 壓縮包"使用 -zx , ".bz 壓縮包"使用 -jx
2.編譯安裝
cd /解壓縮后/的文件夾
/usr/local/bin/phpize #用 phpize 命令生成 configure 配置文件
./configure --with-php-config=/usr/local/php/bin/php-config #配置
make #編譯
sudo make install #安裝
3.修改 php.ini
在 php.ini 中添加:
extension=名稱.so # "名稱"為擴展的名稱. 或者可以用重定向的命令修改 php.ini sudo echo extension=名稱.so >> /etc/php.ini
4.重啟服務
php -m | grep 擴展名稱 #驗證是否正確安裝上了擴展
sudo systemctl reload php-fpm nginx #systemctl 是 CentOS 7 的命令
編譯安裝 Memcached 擴展
1.安裝 memcached
編譯安裝 memcached 依賴的 libevent 庫
cd /usr/local/src
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent
make && make test && sudo make install
- **編譯安裝 memcached**
cd /usr/local/src
wget http://memcached.org/files/memcached-1.4.39.tar.gz
tar -zxvf memcached-1.4.39.tar.gz
cd memcached-1.4.39.tar.gz
./configure --prefix=/usr/local/memcached
make && make test && sudo make install
2.安裝 PHP 的 Memcached 擴展
編譯安裝 Memcached 擴展插件依賴的 libmemcached 庫
cd /usr/local/src
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18.tar.gz
./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached/bin/memcached
make && make test && sudo make install
- **編譯安裝 PHP PECL 的 Memcached 擴展**
cd /usr/local/src
wget https://pecl.php.net/get/memcached-3.0.3.tgz
tar -zxvf memcached-3.0.3.tgz
cd memcached-3.0.3
/usr/local/bin/phpize #用 phpize 命令生成 configure 配置文件
./configure --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make && make test && sudo make install
驗證一下 memcached 插件是否正確安裝:
ls /usr/lib64/php/modules | grep memcached
3.修改 php.ini
vim /etc/php.ini #可以通過 whereis php 來查看 php.ini 文件的位置
在 php.ini 中添加:
extension=memcached.so
4.重啟服務
sudo systemctl reload php-fpm
編譯 Memcached 過程中踩過的坑
總共需要編譯哪些軟件?
總共需要編譯安裝 4 個軟件:
先安裝 Memcached 依賴的 libevent;
再安裝 PHP PECL 的 Memcached 插件依賴的 libmemcached 庫;
最后安裝 PHP PECL 的 Memcached 插件.
咳咳. 我曾經因為混淆了 Memcached 和 PHP 的 memcached 插件, 而浪費了很多時間. 囧
如何尋找 phpize 命令和 php-config 命令?
使用 whereis 命令, 比如:
whereis phpize #會顯示類似路徑, 像這樣 phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz
whereis php-config #會顯示類似路徑, 像這樣 php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz
或者使用 find 命令:
sudo find / -name phpize
sudo find / -name php-config
PS. php-config 是獲取所安裝的 PHP 配置信息的命令行腳本.
在編譯擴展時,如果安裝有多個 PHP 版本,可以在配置時用 --with-php-config 選項來指定使用哪一個版本編譯,該選項指定了相對應的 php-config 腳本的路徑.
沒有 php-config 命令怎么辦?
如果 PHP 是通過編譯安裝的, php-config 命令會在 PHP 安裝目錄的 bin 目錄下.
但是如果 PHP 是用 yum 安裝的, 是沒有 php-config的. 需要額外安裝相應版本的 php-devel 包:
# 因為我是用 yum 安裝的 php70u, 所以
yum search php70u-devel
sudo yum install php70u-devel.x86_64
之后 whereis php-config, 就會發現已經出現在 /usr/bin/php-config.
PS. "devel" 表示庫的源碼.
提醒: 用 yum 安裝庫, 不光要安裝庫本身(可執行文件), 往往還需要安裝庫的源碼 xxx-devel
注意:
網上有些建議直接安裝 php-devel:
yum install php-devel
但是我執行這個命令碰到這樣的報錯(估計由于這臺服務器之前安裝過 PHP 5.4):
Error: php70u-cli conflicts with php-cli-5.4.16-42.el7.x86_64
Error: php70u-common conflicts with php-common-5.4.16-42.el7.x86_64
Error: php70u-json conflicts with php-common-5.4.16-42.el7.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
所以建議還是用 yum 搜索安裝對應 PHP 版本的 devel 為妥.
用 yum 搜索不到高版本的 php-devel 怎么辦?
官方的 yum 倉庫可能沒有比較新的庫文件, 可以添加公認不錯的 ius 倉庫:
如果是 CentOS 7:
sudo yum install https://centos7.iuscommunity.org/ius-release.rpm -y
如果是 CentOS 6:
sudo yum install https://rhel6.iuscommunity.org/ius-release.rpm -y
在 PECL 中搜索 "memcached" 有 3 個結果, 如何選擇?
在 PECL 中搜索 "memcached" 有 3 個結果:
image.png
mysqlnd_memcache 是將 SQL 語句轉化成 MySQL InnoDB memcached Daemon, 可以排除;
memcache 最近的 stable 版本 是在 2012-09-22, 說明已經停止維護, 排除;
memcached 插件, 需要依賴 libmemcached 庫, 安裝比較麻煩, 不過更新更頻繁, 而且最新的 stable 版本是 2017-02-20. 所以選擇這個插件.
為什么 PHP 的 memcached 插件需要 phpize 命令來生成 configure 文件?
因為 PHP 插件和 PHP 是深度耦合的.
而每個人的 PHP 環境是不一樣的(PHP 版本不同), 所以需要根據環境來定制 configure.
比如分別在我的服務器和筆記本上執行 phpize 命令, 會獲得這樣結果:
image.png
image.png
兩者是不同的
編譯時報錯
編譯時報錯:
make -j2 all-am
make[1]: Entering directory `/usr/local/src/libmemcached-1.0.18'
CXX libhashkit/libhashkit_libhashkit_la-aes.lo
./libtool: line 1125: g++: command not found
make[1]: *** [libhashkit/libhashkit_libhashkit_la-aes.lo] Error 1
make[1]: Leaving directory `/usr/local/src/libmemcached-1.0.18'
make: *** [all] Error 2
根據高人指點, 安裝編譯時可以一股腦裝上這些依賴庫:
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel \
libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel \
bzip2 bzip2-devel ncurses ncurses-devel \
curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel \
openssl openssl-devel openldap openldap-devel \
nss_ldap openldap-clients openldap-servers gd gd2 \
gd-devel gd2-devel perl-CPAN pcre-devel
如果報錯中包含 permission denied, 表示是用戶組的權限問題, 說明你在 make install 前面忘了加 sudo, 或者你可以 su 進入管理員帳號再進行編譯操作.
安裝后, 如何在 PHP 中使用 Memcached?
給個小例子:
在服務器中啟動 Memcached:
/usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -d
參數
說明
默認值
-m
最大使用內存量(單位 MB)
64
-p
端口號
11211
-u
用戶名(在使用 root 運行的時候)
nobody
-d
做為后臺程序(Daemon)啟動
-
然后寫個簡單的 PHP 文件:
$mem = new Memcached(); //實例化一個 Memcached 的對象
$mem->addServer('127.0.0.1', 11211) or die ('Could not connect'); //連接 Memcached 服務器
$mem->set('name', 'phper'); //設置 key - value 值
echo $mem->get('name'); //通過 key 取 value
參考文章
文章歷史
2017/07/09 (第一次發布);
2017/07/09 寫了個 PHP 使用 Memcached 的小例子;
2017/07/10 修正拼寫錯誤(將 ./configure誤寫成了 .configure). 修正編譯 PHP 的 Memcached 插件時的編譯配置錯誤; 增加章節 -- "為什么 PHP 的 memcached 插件需要 phpize 命令來生成 configure 文件";
如果我的文章對你有用, 希望給些改進的建議, 或者打個"喜歡" _
總結
以上是生活随笔為你收集整理的php memcached 扩展下载,编译安装 PHP 的 Memcached 扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlerror.java.1055,a
- 下一篇: Matlab中cq是什么,Matlab中