CentOS+Apache+php無法訪問redis的解決方案

來源:互聯網
上載者:User

標籤:

 

 

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 sucessfullyServer 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 sucessfullyStored 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 sucessfullyStored string in redisRedisMongodbMysql
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 sucessfullyStored string in redis::tutorial-nametutorial-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

CentOS+Apache+php無法訪問redis的解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.