CentOS+Apache+php无法访问redis的解决方法

PHP 使用 Redis

安装

开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases

PHP安装redis扩展

以下操作需要在下载的 phpredis 目录中完成:

$ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
$ cd phpredis-2.2.7                      # 进入 phpredis 目录
$ /usr/local/php/bin/phpize              # php安装后的路径
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install

如果你是 PHP7 版本,则需要下载指定分支:

git clone -b php7 https://github.com/phpredis/phpredis.git

修改php.ini文件

vi /usr/local/php/lib/php.ini

增加如下内容:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"

extension=redis.so

安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。


连接到 redis 服务

<?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect(‘127.0.0.1‘, 6379);
   echo "Connection to server sucessfully";
         //查看服务是否运行
   echo "Server is running: " . $redis->ping();
?>

执行脚本,输出结果为:

Connection to server sucessfully
Server is running: PONG

Redis PHP String(字符串) 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect(‘127.0.0.1‘, 6379);
   echo "Connection to server sucessfully";
   //设置 redis 字符串数据
   $redis->set("tutorial-name", "Redis tutorial");
   // 获取存储的数据并输出
   echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis:: Redis tutorial

Redis PHP List(列表) 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect(‘127.0.0.1‘, 6379);
   echo "Connection to server sucessfully";
   //存储数据到列表中
   $redis->lpush("tutorial-list", "Redis");
   $redis->lpush("tutorial-list", "Mongodb");
   $redis->lpush("tutorial-list", "Mysql");
   // 获取存储的数据并输出
   $arList = $redis->lrange("tutorial-list", 0 ,5);
   echo "Stored string in redis";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis
Redis
Mongodb
Mysql

Redis PHP Keys 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect(‘127.0.0.1‘, 6379);
   echo "Connection to server sucessfully";
   // 获取数据并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:: ";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list

问题处理:

在CentOS下配置Apache+php+redis+phpredis环境。
编辑访问redis缓存的php程序test.php,以应用程序方式在后台运行,可成功访问Redis,而在Apache下以网页形式访问时则出错,在
访问Redis以及之后的代码均不再执行。查看Apache的日志:/var/log/httpd/error_log,发现代码运行时出现异常:
PHP Fatal error: Uncaught exception ‘RedisException’ with message ‘Redis server went away’ in /var/www/html/test.php

在网上查该异常时均认为是php的Sokcet超时时间设置的过短,应该在代码前加上:ini_set(‘default_socket_timeout’, -1);
经测试仍无法解决该问题,因在代码后台运行正常,因此判断并非代码本身问题,而是Apache不允许访问网络资源,尝试如下解决方法:
打开/etc/selinux/config,找到其中的:
SELINUX=enforcing
改为:SELINUX=disabled

问题解决!

如果仍不能解决问题,可执行如下指令:
/usr/sbin/setsebool httpd_can_network_connect=1

时间: 2024-12-16 10:38:47

CentOS+Apache+php无法访问redis的解决方法的相关文章

CentOS+Apache+php无法访问redis的解决方法 Redis server went away

在CentOS下配置Apache+php+redis+phpredis环境.编辑访问redis缓存的php程序test.php,以应用程序方式在后台运行,可成功访问Redis,而在Apache下以网页形式访问时则出错,在访问Redis以及之后的代码均不再执行.查看Apache的日志:/var/log/httpd/error_log,发现代码运行时出现异常:PHP Fatal error: Uncaught exception 'RedisException' with message 'Redi

客户端登录提示 :拒绝访问Temp目录解决方法

系统环境搭建好后,在客户端运行,登录提示:拒绝访问Temp目录解决方法,IIS apppool\oaserver没有访问temp目录的权限. 引起原因:因为服务端目录Temp权限不足解决方法:把 C:\Windows\Temp 目录设 为IIS_IUSRS权限即可. 原文地址:http://bbs.delit.cn/thread-729-1-1.html 转载请注明出处: 撰写人:度量科技http://www.delit.cn

WampServer2.0的Apache的service无法启动的解决方法

今天在家装WampServer2.0做php开发,但是装好了Apache的service却无法启动,点击了重新启动还是不 行,于是网上求助,原来才知道我开了网页迅雷的缘故,因为像qq音乐和网页迅雷这样的文件都会默认占 用80端口的,我试着把迅雷关掉重启服务,localhost启动成功,mysql测试页面也无异常,很高兴,其实还 有其他的原因,比如你是从事.net开发的肯定有IIS,那么IIS是默认强制占用80端口的,所以你需要先停止 IIS服务,具体方法是控制面板->管理工具->服务,找到II

ASP.NET对路径&quot;C:/.......&quot;的访问被拒绝 解决方法小结

问题: 异常详细信息: System.UnauthorizedAccessException: 对路径“C:/Supermarket/output.pdf”的访问被拒绝. 解决方法: 一.在IIS中的默认应用程序池-->高级设置...-->标识改成Local System可以解决该问题. 二.在需要进行读写操作的目录下添加Network Service这个帐号. 具体过程:对该文件夹按右键--属性--安全--添加--高级--立即查找--在“搜索结果”下选“NETWORK SERVICE”--确

(转)apache外网不能访问分析与解决方法

转自:http://blog.sina.com.cn/s/blog_6bb7ebcc0101g0aw.html 说明:新手,配完到生效,机器可能有个延迟,切记,这个延迟是正常的. apache安装好以后,在本机可以用:http://localhost 或者 http://127.0.0.1进行访问,但是,在外网(相对本机来说的,局域网也算)不能访问. 这种情况可以分为两个问题,第一个是在局域网内,第二国是在互联网: 有三种情况可能造成这种现象, 1.配置文件没有设置外网访问: 2.防火墙,计算机

apache外网不能访问分析与解决方法

apache安装好以后,在本机可以用:http://localhost 或者 http://127.0.0.1进行访问,但是,在外网(相对本机来说的,局域网也算)不能访问. 这种情况可以分为两个问题,第一个是在局域网内,第二国是在互联网: 有三种情况可能造成这种现象, 1.配置文件没有设置外网访问: 2.防火墙,计算机本身的防火墙禁止了外网通过80端口(默认的,也可以自定义别的)访问: 3.80端口没有对外网开放,或者局域网内,或者互联网(外网防火墙或者其他运帷软件): 如果你配置的服务器是个远

关于出现 org.apache.commons.lang.exception.NestableRuntimeException的解决方法

最近做服务端和客户端之间的访问,出现了 org.apache.commons.lang.exception.NestableRuntimeException等状况.实在令人头大,翻到了一个很好的帖子说明了这个问题. 原文网址如下:http://blog.csdn.net/zb0567/article/details/7893063 为方便更多的人解决这个问题,现将原文贴出 Java.lang.ClassNotFoundException: org.apache.commons.lang.exce

Centos下安装bowtie的问题与解决方法

前提:已经安装了boost库. 安装的版本:bowtie1.2.1 解压后,发现文件包内已经有Makefile.所以直接make:$make 问题1:<tbb/tbb.h>:no such file or directory. 解决方法:下载tbb库,并将tbb目录copy到/usr/include 问题2:/bin/ld:can not find -Iz j解决方法:下载zlib-devel:#yum install zlib-devel (备注,centos中是zlib-devel,ubu

Centos 6.x 上升级python的解决方法

本文介绍的是在Centos 6.5上将自带的 Python 2.6.6 升级到 2.7.8的方法. 看网上的资料,基本都说因为Centos系统旧版本的python已经被深度依赖,因此卸载原有python或者直接升级到2.7.x都不是特别好的解决方法.只有安装一个新的python比较合适. 1. 下载2.7.8版本的python(2.7.x应该都可以),Gzipped source tar ball(2.7.8)(sig),命令如下: wget https://www.python.org/ftp