LAMP架构(1)

一.LAMP架构介绍 

  • httpd、PHP、MySQL三者如何工作  

mark

Apache不能直接和Mysql进行通讯,只能通过PHP模块进行通讯 
Apache和PHP必须安装在同一台Linux机器 
Apcche通过PHP和Mysql进行通讯,该过程为动态请求

1. PHP作为一种后台操作语言,类似asp,可以制作web页面,创建ajax请求,访问数据库的请求,操作数据库表格等。
2. Apache服务,它可以解析html文件,解析php文件,提供html发出的http请求,并响应这个请求,返回给html一个php或者其他后台脚本的请求,如果你不开启Apache的服务,请求不能进行,无法使用php或者asp访问后台数据。这是一个中间的过程,目前的理解是这样的。不启动回报404。
3. MySQL数据库的服务,php是脚本语言,可以页面,可以访问后台数据库,如果没有开启mysql服务,或者其他同类的访问数据库的服务,php中的脚本不能链接到数据库,不开启时,请求服务提示没有mysql对象,不启动回报找不到Mysql。   

总结:前端访问后台,总共需要三个过程,首先,html通过Apache服务请求php文件,或者其他url链接,如果是访问本地php文件,则要求两个文件在同一个服务下,第二步,php文件被Apache服务器解析,执行php文件,访问后台数据库,第三步,执行php文件里的指令,访问数据库中的表,返回数据作为html文件中创建的请求的响应,三个过程就是访问后台数据库的过程

二.Mysql、MariaDB介绍

 MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)  

MySQL官网https://www.mysql.com  最新版本5.7GA/8.0DMR  MySQL5.6变化比较大,5.7性能上有很大提升  

Mariadb为MySQL的一个分支,官网https://mariadb.com/最新版本10.2  MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立.  

Mariadb5.5版本对应MySQL的5.5,10.0对应MySQL5.6  Community 社区版本,Enterprise 企业版,GA(Generally Available)指通用版本,在生产环境中用的,DMR(Development Milestone Release)开发里程碑发布版,RC(Release Candidate)发行候选版本,Beta开放测试版本,Alpha内部测试版本


三.MySQL安装

  • MySQL通常是通过rpm(使用yum安装)、源码(与Apache的源码安装不同)、、二进制免编译(不用配置,不用编译,rpm类似。但是rpm是无法定义安装路径,默认就是安装在/usr/下面,而二进制免编译包是可以选择安装位置的。)

  • 如果追求极致的性能,那么需要自己去编译。不然用二进制免编译就可以了。以后工作中没有特殊的要求使用二进制免编译即可。

Mysql使用二进制免编译安装方法:

源码包以及需要的资源都放在/usr/local/src/目录下。

1.下载MySQL5.6_64位二进制包

wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz

2.将下载的包解压

[root@xzl-linux:/usr/local/src]# tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz

3.将解压后的目录移动到/usr/local/目录下并改名为mysql

[root@xzl-linux:/usr/local/src]# mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql

4.切换到/usr/local/mysql/目录下,先ls查看是否有文件或者目录。接着创建mysql用户,创建/data/目录。

[root@xzl-linux:/usr/local/mysql]# ls
bin      data  include  man         README   share      support-files
COPYING  docs  lib      mysql-test  scripts  sql-bench
[root@xzl-linux:/usr/local/mysql]# mkdir /data/
[root@xzl-linux:/usr/local/mysql]# useradd mysql -s /sbin/nologin

5.进行初始化

[root@xzl-linux:/usr/local/mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
//--user表示定义数据库以哪个用户身份运行,--datadir表示定义数据库的安装目录(建议放在大空间的分区上。)

6.初始化会报错,提示我们需要安装一些包,但是不太知道包的名称,可以使用yum list 来模糊搜索,或者将报错复制下来在www.bing.com或者www.goole上来寻找答案。yum list 出来的包不确定是哪一个就全部安装上。最后发现是需要安装perl-Data-Dumper.x86_64这个包,将这个包安装好后再次执行上面的初始化命令。

[root@xzl-linux:/usr/local/mysql]# yum list | grep -i dumper
perl-Data-Dumper.x86_64                     2.145-3.el7                base     
perl-XML-Dumper.noarch                      0.81-17.el7                base     
[root@xzl-linux:/usr/local/mysql]# yum install -y perl-Data-Dumper
[root@xzl-linux:/usr/local/mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

如何判断初始化过程是否正常,第一个可以查看过程中是否出现了2次OK。第2个是执行echo $?如果输出结果为0为正常。

7.初始化完成后复制配置文件(support-files/my-default.cnf

[root@xzl-linux:/usr/local/mysql]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y  //因为系统默认安装了或者安装其他包存在依赖关系而安装上了mariadb-libs-5.5.56-2.el7.x86_64这个包而创建了/etc/my.cnf。这里直接覆盖即可。
[root@xzl-linux:/usr/local/mysql]# 
我们也可以使用默认的my.cnf配置文件,只不过需要做以下更改:
datadir=/data/mysql 
socket=/tmp/mysql.sock 
注释掉: 
includedir /etc/my.cnf.d 
log-error= 
pid-file=

8.复制启动脚本到/etc/init.d/并修改文件名为mysqld

[root@xzl-linux:/usr/local/mysql]# cp support-files/mysql.server /etc/init.d/mysqld

再使用vim修改启动脚本中这2个地方:

9.将mysqld加入到开机启动项中

[root@xzl-linux:/etc/init.d]# chkconfig --add mysqld
[root@xzl-linux:/etc/init.d]# 
[root@xzl-linux:/etc/init.d]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysqld         	0:关	1:关	2:开	3:开	4:开	5:开	6:关
netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
[root@xzl-linux:/etc/init.d]# 

10.启动mysql服务

[root@xzl-linux:/etc/init.d]# service mysqld start  //启动mysqld服务
Starting MySQL.Logging to '/data/mysql/xzl-linux.err'.
. SUCCESS! 
[root@xzl-linux:/etc/init.d]# ps aux | grep mysql   //检查是否成功启动mysql服务
root      23163  0.0  0.1  11812  1616 pts/0    S    15:03   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/xzl-linux.pid
mysql     23271  6.5 45.0 1302724 449776 pts/0  Sl   15:03   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=xzl-linux.err --pid-file=/data/mysql/xzl-linux.pid
root      23297  0.0  0.0 112720   972 pts/0    R+   15:03   0:00 grep --color=auto mysql
[root@xzl-linux:/etc/init.d]# netstat -lnpt | grep 3306 //检查mysql的服务端口3306是否成功打开
tcp6       0      0 :::3306                 :::*                    LISTEN      23271/mysqld        
[root@xzl-linux:/etc/init.d]# 

或者用命令行的方式来启动:

[root@xzl-linux:/etc/init.d]# service mysqld stop // 先停止
[root@xzl-linux:/etc/init.d]/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &  //使用命令方式开启服务并将服务丢在后台运行

知识点:

当我们使用kill命令去杀掉某个服务时,最好使用killall 命令,因为kill命令可能会造成数据丢失。killall命令会先等数据写完后再杀掉,更加安全。如果以后的工作中遇到mysqld的进程杀不死,ps还会有进程,那说明将数据慢慢写入到磁盘中,千万不能使用kill -9来杀进程,否则很可能丢数据。

[root@xzl-linux:~]# ps aux | grep mysql
root      23334  0.0  0.1 113308  1640 ?        S    15:12   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql     23431  0.6 45.0 1302724 449856 ?      Sl   15:12   0:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=xzl-linux.err --pid-file=xzl-linux.pid
root      23483  0.0  0.0 112720   972 pts/1    R+   15:14   0:00 grep --color=auto mysql
[root@xzl-linux:~]# killall mysql
mysql: no process found
[root@xzl-linux:~]# killall mysqld
[root@xzl-linux:~]# 
[root@xzl-linux:~]# 
[root@xzl-linux:~]# !ps
ps aux | grep mysql
root      23492  0.0  0.0 112720   972 pts/1    R+   15:15   0:00 grep --color=auto mysql
[root@xzl-linux:~]# 

四.MariaDB安装

1.下载,解压二进制包

[root@xzl-linux:/usr/local/src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
[root@xzl-linux:/usr/local/src]# tar -zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 
[root@xzl-linux:/usr/local/src]# mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb

2.初始化数据库

[root@xzl-linux:/usr/local/mariadb]# cd /usr/local/mariadb/
[root@xzl-linux:/usr/local/mariadb]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mariadb
[root@xzl-linux:/usr/local/mariadb]# echo $?
0

3.拷贝配置文件和启动脚本

[root@xzl-linux:/usr/local/mariadb]# cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
[root@xzl-linux:/usr/local/mariadb]# cp support-files/mysql.server /etc/init.d/mariadb

修改配置文件:
[root@xzl-linux:/usr/local/mariadb]# vim /usr/local/mariadb/my.cnf 
定义basedir、datadir、conf以及启动参数
[mysqld]下定义datadir=/data/mariadb

修改启动脚本:
[root@xzl-linux:/usr/local/mariadb]# vim /etc/init.d/mariadb 
basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=$basedir/my.cnf
搜索start关键字,定义默认配置文件
$bindir/mysqld_safe --defaults-file=“$conf” --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &

4.启动MariaDB服务

[root@xzl-linux:/usr/local/mariadb]# /etc/init.d/mariadb start
Starting mariadb (via systemctl):                          [  确定  ]
[root@xzl-linux:/usr/local/mariadb]# ps aux | grep mariadb
root      23968  0.0  0.1 115432  1760 ?        S    16:20   0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my.cnf --datadir=/data/mariadb --pid-file=/data/mariadb/xzl-linux.pid
mysql     24087  0.7  4.9 1125076 49652 ?       Sl   16:20   0:00 /usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/my.cnf --basedir=/usr/local/mariadb --datadir=/data/mariadb --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mariadb/xzl-linux.err --pid-file=/data/mariadb/xzl-linux.pid --socket=/tmp/mysql.sock --port=3306
root      24123  0.0  0.0 112720   972 pts/0    R+   16:20   0:00 grep --color=auto mariadb
[root@xzl-linux:/usr/local/mariadb]# netstat -lnp | grep 3306  //mariadb和mysql一样都是监听的3306端口 
tcp6       0      0 :::3306                 :::*                    LISTEN      24087/mysqld        
[root@xzl-linux:/usr/local/mariadb]# 

注意:当安装了mysql和mariadb两个数据库时,我们必须停止掉其中一个,两个服务不能同时启动,会产生冲突!


五.Apache安装

Apache是一个基金会的名字,httpd才是需要安装的软件包,早期它的名字就叫apache。apache 2.2版本和2.4版本不一样,涉及apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows),yum安装的apr版本和https 2.4需要的apr版本不一致,需要编译安装apr和apr-util

1.下载并解压源码包

Apache下载地址:

2.2源码包: https://cfhcable.dl.sourceforge.net/project/apachehttpserver/httpd-2.2.27.tar.gz

2.4源码包: http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.34.tar.gz

apr: http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz

apr-util: http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz

解压:

[root@xzl-linux:/usr/local/src]# tar -zxvf apr-1.6.3.tar.gz 
[root@xzl-linux:/usr/local/src]# tar -zxvf apr-util-1.6.1.tar.gz 
[root@xzl-linux:/usr/local/src]# tar -zxvf  httpd-2.4.34.tar.gz 

2.编译安装apr

[root@xzl-linux:/usr/local/src]# cd apr-1.6.3/
[root@xzl-linux:/usr/local/src/apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@xzl-linux:/usr/local/src/apr-1.6.3]# make
[root@xzl-linux:/usr/local/src/apr-1.6.3]# make install

3.编译安装apr-util

[root@xzl-linux:/usr/local/src]# cd apr-util-1.6.1/
[root@xzl-linux:/usr/local/src/apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr //这里需要指定一下apr的安装路径
[root@xzl-linux:/usr/local/src/apr-util-1.6.1]# make && make install

4.编译安装Apache

[root@xzl-linux:/usr/local/src/httpd-2.4.34]# cd httpd-2.4.34/
[root@xzl-linux:/usr/local/src/httpd-2.4.34]# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
[root@xzl-linux:/usr/local/src/httpd-2.4.34]# make && make install

5.启动Apache

[root@xzl-linux:/usr/local/src/httpd-2.4.34]# cd /usr/local/apache2.4/
[root@xzl-linux:/usr/local/apache2.4]# bin/apachectl start //启动apache服务时会出现以下提示,这并不是报错信息
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a5f8:4223:cd25:4cc5. Set the 'ServerName' directive globally to suppress this message

[root@xzl-linux:/usr/local/apache2.4]# ps aux | grep httpd //有httpd进程时说明apache服务已经正常启动了
root      55328  0.0  0.2  97628  2532 ?        Ss   21:35   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon    55329  0.0  0.2 384456  2376 ?        Sl   21:35   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon    55330  0.0  0.2 384456  2376 ?        Sl   21:35   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon    55331  0.0  0.2 384456  2376 ?        Sl   21:35   0:00 /usr/local/apache2.4/bin/httpd -k start
root      55414  0.0  0.0 112720   972 pts/0    R+   21:37   0:00 grep --color=auto httpd
[root@xzl-linux:/usr/local/apache2.4]# netstat -lnp | grep httpd //监听的是80端口
tcp6       0      0 :::80                   :::*                    LISTEN      55328/httpd         
[root@xzl-linux:/usr/local/apache2.4]# 
  • 查看Apache加载的所有模块
[root@xzl-linux:/usr/local/apache2.4]# bin/httpd -M //也可以使用bin/apachectl -M查看,效果是一样的
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a5f8:4223:cd25:4cc5. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
[root@xzl-linux:/usr/local/apache2.4]# 

模块分为static、shared
静态(static)和扩展(shared)的区别在于:
静态模块被编译在主二进制(/apache2.4/bin/httpd)中
扩展模块的文件路径在:/usr/local/apache2.4/modules


六.安装PHP5

php官网为www.php.net

主流版本为5.6/7.1

PHP下载地址:

5.6源码包: http://cn2.php.net/distributions/php-5.6.32.tar.bz2

5.5源码包: http://cn2.php.net/distributions/php-5.5.38.tar.bz2

5.4源码包: http://cn2.php.net/distributions/php-5.4.45.tar.bz2

7.1源码包: http://cn2.php.net/distributions/php-7.1.6.tar.bz2

其他版本: http://php.net/releases/

安装过程:

1.下载并解压php5.6

[root@xzl-linux:/usr/local/src]# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
[root@xzl-linux:/usr/local/src]# tar -zxvf php-5.6.30.tar.gz 

2.编译安装php5.6

[root@xzl-linux:/usr/local/src]# cd php-5.6.30/
[root@xzl-linux:/usr/local/src/php-5.6.30]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc  --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
//小技巧:当我们输入一条命令很长时,可以在使用转义符号\将一条命令进行换行输入,这样更加直观点

第一次安装时会报很多错误信息,这里首先就报如下信息了:
configure: error: xml2-config not found. Please check your libxml2 installation.
通过查询发现需要yum安装libxml2-devel

再次报错:
configure: error: Cannot find OpenSSL's <evp.h>
需要安装openssl-devel

再次报错:
configure: error: Please reinstall the BZip2 distribution
安装bzip2-devel

再次报错:
configure: error: jpeglib.h not found.
安装libjpeg-devel

再次报错:
configure: error: png.h not found.
安装libpng-devel

再次报错:
configure: error: freetype-config not found.
安装freetype-devel

再次报错:
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
安装epel-release(扩展源)然后安装libmcrypt-devel

经历了上面这么多次的报错后,此时终于正常了,也就是说第一次安装最好提前把以下包一次性安装好以节省时间:
yum install -y libxml2-devel openssl-devel bzip2-devel libjpeg-devel freetype-devel epel-release libmcrypt-devel libpng-devel

接下来就是make和make install了
[root@xzl-linux:/usr/local/src/php-5.6.30]# make && make install

关于编译参数的说明:

--with-apxs2=/usr/local/apache2.4/bin/apxs 为apache的自动安装扩展模块工具

--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 为php和mysql通信的工具,php7中已经取消--with-mysql=/usr/local/mysql

3.查看php加载的静态模块

[root@xzl-linux:/usr/local/src/php-5.6.30]# /usr/local/php/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

4.查看php配置信息

[root@xzl-linux:/usr/local/src/php-5.6.30]# /usr/local/php/bin/php -i

5.拷贝配置文件

[root@xzl-linux:/usr/local/src/php-5.6.30]# cp php.ini-production /usr/local/php/etc/php.ini


php.ini-production配置文件适合在生产环境
php.ini-development配置文件适合在开发环境

七.安装PHP7

1.下载并解压源码包

[root@xzl-linux:/usr/local/src]# wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
[root@xzl-linux:/usr/local/src]# tar -jxvf php-7.1.6.tar.bz2 

2.编译PHP7

[root@xzl-linux src]# cd php-7.1.6/
[root@xzl-linux php-7.1.6]# ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
[root@xzl-linux php-7.1.6]# make 
[root@xzl-linux php-7.1.6]# make install

3.查看PHP7加载的静态模块

[root@xzl-linux:/usr/local/src/php-7.1.6]# /usr/local/php7/bin/php -m

4.查看Apache加载的php模块

[root@xzl-linux:/usr/local/src/php-7.1.6]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a5f8:4223:cd25:4cc5. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 php5_module (shared)
 php7_module (shared)

可以看到php5和php7两个模块都已经加载了。但是其实两个模块是不能同时启用的,会产生冲突。
如果需要更改不同的php模块则要修改httpd的配置文件:
[root@xzl-linux:/usr/local/src/php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
 搜索php关键字,将不需要的模块注释掉即可

5.拷贝配置文件

[root@xzl-linux:/usr/local/src/php-7.1.6]# cp php.ini-production /usr/local/php7/etc/php.ini

八. Apache和PHP结合

httpd主配置文件/usr/local/apache2.4/conf/httpd.conf

  • 修改配置文件
[root@xzl-linux:~]# vim /usr/local/apache2.4/conf/httpd.conf

搜索ServerName关键字,把#ServerName www.example.com:80这行的#去掉 //前面提到每次启动apache服务时会有一个警告显示,把这行注释去掉后就不会有警告了

重新启动apache服务报以下错误:
[root@xzl-linux:~]# /usr/local/apache2.4/bin/apachectl restart
httpd not running, trying to start
/usr/local/apache2.4/bin/apachectl: 行 79: 120825 段错误               $HTTPD -k $ARGV
原因就是之前说到的apache加载了php5和php7两个模块产生冲突导致的,解决方法就是继续修改配置文件把其中一个注释掉

添加iptables规则,打开80端口:(也可以通过firewalld去实现,随自己喜欢咯)
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

此时使用物理机可以去访问虚拟机的ip,并会正常打开一个页面。。
如果此时浏览器不能访问该ip,我们应该先ping检查下通不通,再然后通过telnet工具去检查80端口通不通,都正常的情况下再去修改配置文件:

DocumentRoot配置下 
Require all denied  
改为
Require all granted  --拒绝改为允许的意思

修改完后使用下面命令检查配置文件语法是否有误:
[root@xzl-linux:~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

确认无误后重新加载配置文件:(使用此命令可以不用重启服务,以后工作中修改了配置文件都应该使用此命令,这样不会影响正在运行的服务,保证服务不中断)
[root@xzl-linux:~]# /usr/local/apache2.4/bin/apachectl graceful

物理机访问apache测试效果:

出现以上页面就表示apache服务已经正常启用了。

  • 增加php索引页
修改httpd.conf配置文件:
搜索关键字AddType,增加一行解析php配置
AddType application/x-httpd-php .php --注意php .php之间有一个空格

搜索关键字DirectoryIndex index.html,增加php索引页

DirectoryIndex index.html index.php --默认索引页是index.html,该页面就是上面测试时浏览器打开的那个页面,也可以将php页面放左边,左边索引页优先。
  • 验证Apache是否已经支持解析PHP
[root@xzl-linux:~]# vim /usr/local/apache2.4/htdocs/test.php
添加以下内容:
<?php
phpinfo()
?>

浏览器访问:http://115.181.80.209/test.php

出现这个页面则说明php解析已经正常了。通过这个页面可以了解到当前使用php版本是7.1的。我们也可以把php模块改为5.6版本测试下:

  • 无法解析php需检查项:

1.检查apache是否已经加载php模块:

[root@xzl-linux ~]# /usr/local/apache2.4/bin/apachectl -M

2.若无法找到php模块,则查看

[root@xzl-linux ~]# ls /usr/local/apache2.4/modules/libphp*
/usr/local/apache2.4/modules/libphp5.so  /usr/local/apache2.4/modules/libphp7.so

3.若以上检查无问题,则检查apache主配置文件php模块是否被注释,只要有一个php版本开启就行:

[root@xzl-linux ~]# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule php5_module        modules/libphp5.so
#LoadModule php7_module        modules/libphp7.so

4.若模块已被加载,则检查apache主配置文件是否添加php解析配置:

[root@xzl-linux ~]# vim /usr/local/apache2.4/conf/httpd.conf

 AddType application/x-httpd-php .php

课堂笔记:

  • https协议端口号:443

  • pcre包是一个支持正则的软件包

  • apache apxs是一个生成so文件的工具

  • 目前主流的web编程语言:php、java;
  • 手机抓包工具: fiddler
  • apache的三种工作模式:perfork(多进程)、worker(多进程多线程)、event(多进程多线程和一条监控线程) 

之前我们编译安装apache时是必须要先编译安装apr和apr-util这两个软件,但其实还有一种方法可以将它们整合在一起同时进行安装的:

1.将apr和apr-util源码包移动到/usr/local/src/httpd-2.4.34/srclib目录下(注意必须改名为apr和apr-util

2.然后编译安装apache时使用这个参数:./configure --prefix=/usr/local/apache2.4  --enable-so --enable-mpms-shared=all  --with-mpm=event  --enable-mods-shared=most --with-included-apr (这个编译参数和之前相比就多指定了一个apr的参数,这样就可以不用先编译安装apr了)

3. make && make install


扩展:

mysql5.5源码编译安装 http://www.aminglinux.com/bbs/thread-1059-1-1.html
mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html
apache dso https://yq.aliyun.com/articles/6298
apache apxs https://wizardforcel.gitbooks.io/apache-doc/content/51.html
apache工作模式 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn.net/u013785951/article/details/60876816
查看编译参数 http://ask.apelearn.com/question/1295

猜你喜欢

转载自blog.csdn.net/xzl18779631005/article/details/82557765