php memcached 扩展下载,编译安装 PHP 的 Memcached 扩展

b89dc1e78068

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 个结果:

b89dc1e78068

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 命令, 会获得这样结果:

b89dc1e78068

image.png

b89dc1e78068

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 文件";

如果我的文章对你有用, 希望给些改进的建议, 或者打个"喜欢" _

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值