记一次在LAMP中遇到的问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 平常都是用Java的,工作需要翻看一下php的代码,所以临时拿起LAMP(Linux+Apache+MySQL+PHP)来。在使用LAMP中遇到一些异常情况,首先从一个demo说起: [11.

平常都是用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~

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
安全 关系型数据库 Java
1.2 什么是LAMP
1.2 什么是LAMP
141 0
|
Web App开发 存储 关系型数据库
|
关系型数据库 MySQL PHP
|
关系型数据库 MySQL PHP
|
关系型数据库 MySQL PHP
|
Web App开发 安全 关系型数据库
|
开发工具 数据安全/隐私保护
|
关系型数据库 Linux PHP
|
Web App开发 关系型数据库 PHP
|
Web App开发 关系型数据库 测试技术