ubuntu 下php 无法扩展redis

我在ubuntu上用php 5.6.28 的源代码编译了一个版本,但是对接redis失败。
总是提示 Fatal error: Class 'Redis' not found in /alidata/www/web/function.php on line 206
我编译时configure命令是这样的

 ./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-mysql=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-mysqli=mysqlnd \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--disable-ipv6 \
--with-pear \
--with-curl \
--with-openssl

代理服务器用nginx 到 php-fpm,我用 apt-get 安装过了 php5-redis,php.ini 的extension也改了,还是不行。

extension_dir=/usr/local/php/lib/php/extensions
extension=redis.so

phpinfo是这样的

clipboard.png

使用 php-fpm -i 查询,发现php.ini没有加载成功,失败原因匪夷所思,明明我在这个目录下是有php.ini的啊!

Configuration File (php.ini) Path => /usr/local/php/etc
Loaded Configuration File => (none)
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
阅读 7.5k
7 个回答

看你的更新感觉extension地址不对。
比如我的默认的扩展地址是(这个不需要你改):/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212
查一下你的扩展地址。
这地址下是应该要有 redis.so文件的。
修改php.ini,最后重启php-fpm 即可

php-fpm -m 才是现实 cgi模式下的扩展安装情况

php -m 是cli模式下的,注意区分,有些安装环境 二者的 php.ini文件路径不一致,要注意。

从phpinfo 信息来看,你的php.ini 路径是 /usr/local/php/etc/php.ini

按通用的安装扩展方法安装后,修改php.ini,最后重启php-fpm 即可。

我解决这个问题了,但问题原因仍然没有找到。
经过大家的帮助,我定位到问题是php.ini加载失败,然后我搜索找到了这篇文件
http://ask.apelearn.com/quest...
于是我用strace跟了一下

strace  /usr/local/php/sbin/php-fpm -i &> runlog

发现php-fpm 去/usr/local/php目录下寻找php.ini,然后我把php.ini往/usr/local/php目录下拷贝了一份,然后 service php-fpm restart,终于加载成功了!
然而,我并不知道为什么php-fpm会去这个目录下去找php.ini

sudo apt-get install php5.6-redis 试试

你的phpinfo没贴全啊,只有php 5.6 nts,redis的信息没看到。

ubuntu应该有带php*-redis的包的,search下吧。如果没找到的话,就到redis扩展git仓库clone代码下来,phpize,configure,make,make install,修改配置文件php.ini(确认是你编译的php的配置文件)。另外记得重启php-fpm(观察下有没有什么错误提示,比如xxx模块错误)。

apt-get install redis-server 我觉得你需要的是这个

首先,你可以执行PHP -m 会提示模块是否加载成功,如果extension的路径不对会提示你的。
我一般都是编译安装的,下载redis扩展源码

phpize
./configure --with-php-config=/php路径/php-config
make && make install
//修改php.ini
extension=redis.so

redis扩展下载地址https://github.com/nicolasff/...

下载以后你在按照上面的方法编译,php很多扩展都不在核心,需要自己下载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏