平常都是用Java的,工作需要翻看一下php的代码,所以临时拿起LAMP(Linux+Apache+MySQL+PHP)来。在使用LAMP中遇到一些异常情况,首先从一个demo说起:
[11.php代码如下]
<?php
date_default_timezone_set('Asia/Shanghai');
phpinfo();
$conn = mysql_connect("10.101.139.5", "root", "root") or die (mysql_error());
mysql_select_db("vdpcenter");
mysql_query('SET NAMES UTF8');
?>
这里面主要是在mysql_connect()方法运行时发生了如下异常:
[Wed Aug 24 09:09:57 2016] [error][client 10.101.48.252] PHP Fatal error: Call to undefined function mysql_connect() in /var/www/vdp/vdp-web/11.php on line 4.
...
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysql.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0
看得出是应该是少库了,cd到/usr/lib64/目录下也没有找到php相关的文件夹,所以可以确定着一点。安装php时附带安装了很多的依赖包,至于少了哪个就省得查了,直接重装,无脑又高效。
这里需要查看一下已有安装的php相关的依赖包:
[root@hidden ~]#rpm -qa|grep php
可以看到:
这里需要一个一个的删除,比如:
[root@hidden ~]# rpm -e php-mysql-5.5.5-48.el6_8.x86_64
在删除的过程中会遇到删除失败,因为有依赖包的关系,需要先删除其所依赖的包,根据错误提示删除即可,最后删除全部之后,可以通过下面两个命令查看是否删除干净:
[root@hidden ~]#rpm -qa|grep php
或
[root@hidden ~]#php -v
之后开始安装,这里采用的是yum安装的方式(这里采用的是CentOS6的操作系统),如果是RedHat的Linux系统一般是不能采用yum安装的,需要另谋出路啦~
#yum -y install php
#yum search php
#yum -y install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
这里一般是安装完成了,那么下面要测试一下是否安装成功,同样采用文章开头了那个11.php作为测试页面,将其放到/var/www/html下,之后启动apache服务(httpd): service httpd start。
在浏览器中输入:http://localhost/11.php。
是否有以下的画面出现:
有则说明php安装成功,革命尚未成功,同志仍需努力。这里还要继续测试其与mysql之间的连通性。
这里通过查看httpd的error日志(在/var/log/httpd/目录下的error_log,可以通过tail -f /var/log/httpd/error_log 实时打印error日志)来查看结果。
发现文章开头的问题没有了,但是又有了新的问题:
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_connect(): Can't connect to MySQL server on '10.101.139.6' (13) in /var/www/vdp/vdp-web/11.php on line 6
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_select_db(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /var/www/vdp/vdp-web/11.php on line 7
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_select_db(): A link to the server could not be established in /var/www/vdp/vdp-web/11.php on line 7
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /var/www/vdp/vdp-web/11.php on line 8
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_query(): A link to the server could not be established in /var/www/vdp/vdp-web/11.php on line 8
一步一步来,检查:在/etc/my.cnf中有/tmp/mysql.sock的配置,而且在/etc/php.ini中也配置了mysq.default_socket=/tmp/tmp.sock
解决1: 修改/etc/selinux/config文件
#vim /etc/selinux/config
将其中的SELINUX=enforcing修改为SELINUX=disabled,重启httpd服务
#service httpd restart
然后浏览11.php,查看到error_log只有一行错误了,如下:
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_connect(): Can't connect to MySQL server on '10.101.139.6' (13) in /var/www/vdp/vdp-web/11.php on line 6
解决2:输入如下命令:
# setsebool httpd_can_network_connect_db 1
# setsebool -P httpd_can_network_connect 1(这个命令运行需要等待一小段时间)
之后再重启httpd服务,然后浏览测试网页11.php就不报任何错误了,这里就解决了问题了。
应用到真实环境中,可以正常运行。问题解决,over~