在centos7上安装好apache2, php5, 运行 phpinfo()函数一切顺利,
然后github下载 phpredis源码,编译安装也顺利,
照着官网拷贝了一个 php访问redis的程序,
欢迎加入QQ群:<a href="http://shang.qq.com/wpa/qunwpa?idkey=33dc3562400ea77e23c713caf37585852c617efe2e09a24e8bd364a5748bd677">CTP/易盛(行情交易)开发</a>
然后命令行执行 php a.php, 访问redis也正常, 可以读出键值.
但是用网页访问: http://192.168.1.201:9000/a.php
然后就这样活见鬼了, 总是提示500错误。
然后怀疑是不是我自己编译的 phpredis有什么选项错误,与apache不匹配,
我用yum install 重装了phpredis: yum install php-pecl-redis.x86_64
然后继续发现还是没卵用.
然后我开始捣鼓阿里云买的ubuntu 14.04LTS 64bit,
ubuntu 上面直接通过命令 apt-get install apach2 php5 php5-redis
三分钟就能把php读写redis内存数据库的问题搞定, centos下面弄一个下午都没搞定。
今早上终于通过google找到了解决方案
http://www.cnblogs.com/jthb/p/3708532.html
在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