LAMP架构介绍 、MySQL、MariaDB介绍、MySQL安装、MariaDB安装、安装PHP5、安装PHP7、Apache和PHP结合

一、LAMP架构介绍

1、LAMP 是Linux Apache MySQL PHP的简写,其实就是把Apache, MySQL以及PHP安装在Linux系统上,组成一个环境来运行php的脚本语言

  • Apache是最常用的WEB服务软件,httpd真正的名字
  • MySQL是存储的软件,存储的是数据,字符串
  • php是一个脚本语言,与Shell类似,比Shell复杂,php实际上用C开发的,通常用来做网站

可以把Apache+PHP安装在一台机器上,再把MySQL安装在另外一台机器上,也可以把他们三个安装在同一台机器上。但Apache和PHP需要在同一台机器上,因为PHP是作为Apache的一个模块存在的,他们两个必须在一起。
这里写图片描述
网页资源的动态和静态

静态内容服务:客户端发起资源请求,服务器将请求的资源原封不动的发给客户端。

动态资源:服务器将客户端发起的资源先执行一下,进行一定的处理,返还给客户端。(登录时去MsSQL找账号密码的密码进行比对)

2、MySQL/MariaDB介绍

这里写图片描述

3、MySQL安装

这里写图片描述
查看自己什么平台(X86_64显示64位,32位显示i686 i586)

[root@han01 src]# uname -a
Linux han01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

下载

[root@han01 src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

解压安装包

[root@han01 src]# tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

挪动目录,并且改名字

[root@han01 src]# mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql

在挪动后要ls检查一下文件是否正确(有的mkdir创建了目录后,mv时把原目录放到/usr/local/mysql下面,最终导致实验结果不对)

[root@han01 src]# cd /usr/local/mysql
[root@han01 mysql]# ls
bin      data  include  man         README   share      support-files
COPYING  docs  lib      mysql-test  scripts  sql-bench

创建mysql用户,创建Data目录

[root@han01 mysql]# useradd mysql
[root@han01 mysql]# mkdir /data/

初始化,指定用户,指定数据库目录(Perl脚本语言,提示少了一个模块Dumper)

[root@han01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper

模糊搜索一下,加上-i选项不管大小写

[root@han01 mysql]# yum list |grep perl |grep -i dumper
perl-Data-Dumper.x86_64                  2.145-3.el7                   base     
perl-Data-Dumper-Concise.noarch          2.020-6.el7                   epel     
perl-Data-Dumper-Names.noarch            0.03-17.el7                   epel     
perl-XML-Dumper.noarch                   0.81-17.el7                   base  

可以一个一个尝试哪一个才是正确的

[root@han01 ~]# yum install -y perl-Data-Dumper.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 perl-Data-Dumper.x86_64.0.2.145-3.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

安装完后再次初始化下看看是否能成功执行

[root@han01 ~]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
-bash: ./scripts/mysql_install_db: 没有那个文件或目录
[root@han01 ~]# cd /usr/local/mysql/
[root@han01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
Installing MySQL system tables...2018-06-25 23:59:45 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

如果看到2个OK,就说明成功正确,或者echo $?检验上条命令是否对

[root@han01 mysql]# echo $?
0

拷贝配置文件,拷贝到/etc并且改名为my.cnf(mysql的配置文件就叫my.cnf,固定在/etc下,如果想放到其他地方,在启动的时候就得做个指定,不然在启动时会默认去找/etc下的)和启动脚本

[root@han01 mysql]# ls support-files/
binary-configure  magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@han01 mysql]# cp support-files/my-default.cnf /etc/my.cnf^C

在复制前可以看下有一个自带/etc/my.cnf,查一下由哪个rpm来的,可能是CentOS自带的

[root@han01 mysql]# ls /etc/my.cnf
/etc/my.cnf
[root@han01 mysql]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.56-2.el7.x86_64

有这个文件,我们可以用,不用去拷贝,但前提是要修改配置

[root@han01 mysql]# vim /etc/my.cnf

修改datadir,socket,接着在log-error、!includedir和pid前加#,不要它们

[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

修改启动脚本

[root@han01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@han01 mysql]# vi /etc/init.d/mysqld

找到下列这两列,加上目录

basedir=/usr/local/mysql
datadir=/data/mysql

修改权限755,但是它本身就是755

[root@han01 mysql]# ls -l /etc/init.d/mysqld
-rwxr-xr-x. 1 root root 10592 626 00:22 /etc/init.d/mysqld

设置开机自动启动

[root@han01 mysql]# chkconfig --add mysqld
[root@han01 mysql]# 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@han01 mysql]# /etc/init.d/mysqld start^C
[root@han01 mysql]# service mysqld start
Starting MySQL SUCCESS! 
[root@han01 mysql]# 180626 00:27:15 mysqld_safe A mysqld process already exists
^C
[root@han01 mysql]# ps aux |grep mysql
root      1308  0.0  0.1 113264  1600 ?        S    00:26   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/han01.pid
mysql     1445  0.8 29.5 1300776 450276 ?      Sl   00:26   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/han01.err --pid-file=/data/mysql/han01.pid --socket=/tmp/mysql.sock
root      1767  0.0  0.0 112676   980 pts/1    R+   00:27   0:00 grep --color=auto mysql
[root@han01 mysql]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      982/master          
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      982/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      1445/mysqld  

可以用命令行(指定配置文件所在的路径,)

[root@han01 mysql]# service mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@han01 mysql]# !ps
ps aux |grep mysql
root      1796  0.0  0.0 112676   980 pts/1    R+   00:29   0:00 grep --color=auto mysql
[root@han01 mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=
/data/mysql &
[1] 1808
[root@han01 mysql]# 180626 00:31:20 mysqld_safe Logging to '/data/mysql/han01.err'.
180626 00:31:20 mysqld_safe Starting mysqld daemon with databases from /data/mysql

[root@han01 mysql]# !ps
ps aux |grep mysql
root      1808  0.0  0.1 113260  1612 pts/1    S    00:31   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql     1933 11.0 29.4 1300776 449528 pts/1  Sl   00:31   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=/data/mysql/han01.err --pid-file=/data/mysql/han01.pid --socket=/tmp/mysql.sock
root      1956  0.0  0.0 112676   980 pts/1    S+   00:31   0:00 grep --color=auto mysql
[root@han01 mysql]# !net
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      982/master          
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      982/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      1933/mysqld 

用命令行的形式的话,只能用killall mysqld才能关闭(直接Kill可能会数据丢失,killall会停止当前的写读操作,写完后才会结束进程)

三、MariaDB安装

这里写图片描述
下载好包,解压

[root@han01 mysql]# tar zxvf rmariadb-10.2.6-linux-glibc_214-x86_64.tar.gz

拷贝并改名,进入到mariadb目录下

[root@han01 src]# mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
[root@han01 src]# cd /usr/local/mariadb
[root@han01 mariadb]# 

初始化并检查

[root@han01 mariadb]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb

如果不定义basedir有可能会去找mysql

[root@han01 mariadb]# echo $?
0
[root@han01 mariadb]# ls /data/mariadb/
aria_log.00000001  ib_buffer_pool  ib_logfile0  mysql               test
aria_log_control   ibdata1         ib_logfile1  performance_schema

拷贝配置文件,启动脚本

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

编辑配置文件,不需要改动

[root@han01 mariadb]# vim /usr/local/mariadb/my.cnf

需要改动的是启动脚本
conf指定配置文件所在路径

[root@han01 mariadb]# vim /etc/init.d/mariadb
basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=$basedir/my.cnf

启动命令下面指定一下,添加–defaults-file=”$conf”

case "$mode" in
  'start')
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL"
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      $bindir/mysqld_safe --defaults-file="$conf" --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &

在启动前,先查看下mysql有没在启动,会产生冲突,因为两个监听的窗口一样的

[root@han01 mariadb]# ps aux |grep mysql
root      2121  0.0  0.0 112676   980 pts/1    R+   01:08   0:00 grep --color=auto mysql
[root@han01 mariadb]# /etc/init.d/mariadb start
Reloading systemd:                                         [  确定  ]
Starting mariadb (via systemctl):                          [  确定  ]

查看服务是否启动成功

[root@han01 mariadb]# ps aux |grep mariadb
root      2168  0.0  0.1 115388  1724 ?        S    01:10   0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my.cnf --datadir=/data/mysql --pid-file=/data/mysql/han01.pid
mysql     2284  3.6  3.7 1125124 56556 ?       Sl   01:10   0:01 /usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/my.cnf --basedir=/usr/local/mariadb --datadir=/data/mysql --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mysql/han01.err --pid-file=/data/mysql/han01.pid --socket=/tmp/mysql.sock --port=3306
root      2338  0.0  0.0 112676   980 pts/1    S+   01:10   0:00 grep --color=auto mariadb

端口,3306

[root@han01 mariadb]# netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      982/master          
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      982/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      2284/mysqld  

一台机器上装了mysql和mariadb
在指定了自定义的配置文件/usr/local/mariadb/my.cnf,进行修改

[root@han01 mariadb]# vi /usr/local/mariadb/my.cnf

找到mysql加上datadir

[mysqld]
datadir = /data/mariadb

查看是否成功

[root@han01 mariadb]# killall mysqld
mysqld: no process found
[root@han01 mariadb]# ps aux |grep mysql
root      2571  0.0  0.0 112676   980 pts/1    R+   01:20   0:00 grep --color=auto mysql
[root@han01 mariadb]# /etc/init.d/mariadb start
Starting mariadb (via systemctl):                          [  确定  ]
[root@han01 mariadb]# ps aux |grep mysql
root      2585  0.0  0.0 112676   980 pts/1    R+   01:20   0:00 grep --color=auto mysql
[root@han01 mariadb]# ps aux |grep mysql
root      2587  0.0  0.0 112676   980 pts/1    R+   01:20   0:00 grep --color=auto mysql
[root@han01 mariadb]# /etc/init.d/mariadb restart
Restarting mariadb (via systemctl):                        [  确定  ]
[root@han01 mariadb]# ps aux |grep mysql
root      2627  0.0  0.1 115388  1732 ?        S    01: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/han01.pid
mysql     2746  8.5  3.9 1125024 60228 ?       Sl   01: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/han01.err --pid-file=/data/mariadb/han01.pid --socket=/tmp/mysql.sock --port=3306
root      2782  0.0  0.0 112676   980 pts/1    R+   01:21   0:00 grep --color=auto mysql


四、Apache安装

这里写图片描述
下载3个包
http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.33.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.bz2

apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows
查看

[root@han01 mariadb]# mv apr-* /usr/local/src/
[root@han01 mariadb]# cd /usr/local/src/
[root@han01 src]# ls
apr-1.6.3.tar.gz        mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
apr-util-1.6.1.tar.bz2  mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
httpd-2.4.33.tar.gz

解压这3个包

编译安装apr
[root@han01 src]# cd apr-1.6.3/
[root@han01 apr-1.6.3]# ./configure --prefix=/usr/local/apr

出现错误,安装以下内容

标题

安装后,再次执行之前的命令,执行完后进行检查,发现问题已经解决

[root@han01 apr-1.6.3] make && make install
[root@han01 apr-1.6.3]# echo $?
0
编译安装apr-util
[root@han01 ~]#curl -O  http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.1.tar.gz 
[root@han01 ~]#tar xf  apr-util-1.6.1.tar.gz
[root@han01 ~]#cd apr-util-1.6.1 
[root@han01 apr-util-1.6.1]# ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr/
[root@han01 apr-util-1.6.1]#  make  &&  make  install
编译安装httpd
[root@han01 src]# cd /usr/local/src/httpd-2.4.33

[root@han01 httpd-2.4.33]# ./configure \
> --prefix=/usr/local/apache2.4 \
> --with-apr=/usr/local/apr \
> --with-apr-util=/usr/local/apr-util \
> --enable-so \                #支持动态扩展模块
> --enable-mods-shared=most         #表示以共享的方式安装大多数功能模块
  • PHP是Apache的一个模块,这个模块实际上就是一个文件,就是 .so 后缀名的文件,那他以Apache的一个模块形式存在,所以Apache本身是一个进程,是一个服务,在这个进程里面,通过一些配置文件指定一个模块的路径,那就可以去调用模块。

  • PHP模块是用来解析PHP的,执行PHP脚本的,所以就可以通过PHP脚本将PHP模块加载到进程里面去,加载到主进程里面去,

  • 当它遇到PHP解析的需求时,它就会去调用这个模块,去执行一些操作
    这些模块是一些独立的文件

  • 而且还可以指定有哪些动态扩展的模块,需要加载哪些,这里指定是most
    –enable-mods-shared=most

  • most,就是绝大多数,大多数会用到的模块,都会加载进来

安装后

在安装完成后,进入到/usr/local/apache2.4/目录下,并 ls 查看有哪些目录

[root@han01 httpd-2.4.33]# cd /usr/local/apache2.4/
[root@han01 apache2.4]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules
  • /bin目录下,是可执行文件。也就是说,要启动一个服务,它就是在bin/httpd下面有一个文件或者命令,bin/httpd也是核心的二进制文件
[root@han01 apache2.4]# ls bin/httpd
bin/httpd
[root@han01 apache2.4]# ls -l bin/httpd
-rwxr-xr-x. 1 root root 2348432 627 05:30 bin/httpd
[root@han01 apache2.4]# du -sh bin/httpd
2.3M    bin/httpd
  • conf目录,是配置文件所在目录
[root@han01 apache2.4]# ls conf/
extra  httpd.conf  magic  mime.types  original
  • htdocs目录,是存放了一个访问页。启动完httpd服务后,去访问网站,默认的网站会放到 htdocs/目录下
[root@han01 apache2.4]# ls htdocs/
index.html
  • logs目录,就是日志相关的目录,包含错误日志,访问日志
  • man目录,就是一些帮助文档
  • modules扩展模块目录,所有模块都放到了modules目录下,每一个模块都代表着一个功能
[root@han01 apache2.4]# ls modules
httpd.exp               mod_buffer.so               mod_lbmethod_heartbeat.so  mod_reqtimeout.so
mod_access_compat.so    mod_cache_disk.so           mod_log_config.so          mod_request.so
mod_actions.so          mod_cache.so                mod_log_debug.so           mod_rewrite.so
mod_alias.so            mod_cache_socache.so        mod_logio.so               mod_sed.so
mod_allowmethods.so     mod_cgid.so                 mod_macro.so               mod_session_cookie.so
mod_auth_basic.so       mod_dav_fs.so               mod_mime.so                mod_session_dbd.so
mod_auth_digest.so      mod_dav.so                  mod_negotiation.so         mod_session.so

查看Apache加载了哪些模块

  • /usr/local/apache2.4/bin/httpd -M 查看加载的模块

    -M 把所有的模块列出来 等于

  • /usr/local/apache2.4/bin/apachectl -M //查看加载的模块——>这是一个shell文件,它调用了二进制的httpd
[root@han01 apache2.4]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e009:8425:90b5:4c23. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
省略..
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)

[root@han01 apache2.4]# /usr/local/apache2.4/bin/apachectl -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e009:8425:90b5:4c23. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)

省略..
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
  • 在模块的右侧有小括号,里面是 static 或 shared ,static是静态
  • 静态和动态的区别
    静态是直接把模块编译进了主脚本或主二进制文件里面
  • http是一个核心文件,这个文件加载了哪些模块
  • 如果是static,那也就意味这个模块在httpd里面,和它绑定在了一起,它们是一个整体
  • 如果是shared,说明它是一个扩展的模块,这个模块是一个文件,我们可以看到的 .so 文件,文件的目录是在/usr/local/apache2.4/module目录下

启动Apache2.4

在安装完成Apache2.4后,Apache启动不需要定义启动脚本,也不需要放到/etc/init.d下去,直接使用命令行启动就行

/usr/local/apache2.4/bin/apachectl start 命令行启动Apache脚本

启动脚本后,虽然出现提示,但不表示启动失败,若不想要出现提示,只需要编辑配置文件即可

[root@han01 apache2.4]# /usr/local/apache2.4/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e009:8425:90b5:4c23. Set the 'ServerName' directive globally to suppress this message
httpd (pid 34948) already running
[root@han01 apache2.4]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      889/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1121/master         
tcp6       0      0 :::80                   :::*                    LISTEN      34948/bin/httpd     
tcp6       0      0 :::22                   :::*                    LISTEN      889/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1121/master         
[root@han01 apache2.4]# ps aux |grep httpd
root     34948  0.0  0.1  95580  2528 ?        Ss   05:33   0:00 bin/httpd
daemon   34953  0.0  0.2 382408  4436 ?        Sl   05:33   0:00 bin/httpd
daemon   34954  0.0  0.2 382408  4436 ?        Sl   05:33   0:00 bin/httpd
daemon   34955  0.0  0.2 382408  4436 ?        Sl   05:33   0:00 bin/httpd
root     35050  0.0  0.0 112720   984 pts/0    R+   05:39   0:00 grep --color=auto httpd

httpd默认监听端口为80,mysqld默认监听端口为3306,25端口是发邮件的,22端口是远程登录的

五、安装PHP5

这里写图片描述

PHP介绍

目前主流的PHP版本为5.6或7.1版本
现在很多企业是使用PHP 5 的版本,5.4版本或5.3版本,或者使用更老的版本
PHP7 的版本是近几年才出来的,7的版本改动很大,所以比较老的程序里面使用PHP7会出现问题,所以很多企业必须使用PHP5 ,而使用PHP7 会出现问题
PHP7 性能上得到很大的提升,如果程序,也就是你的PHP代码能够使用PHP7 ,那就使用PHP7 ,否则就使用PHP5

安装PHP5

切换到 /usr/local/src目录下,下载php5.6 的压缩包,然后解压

[root@han01 apache2.4]# cd /usr/local/src/
[root@han01 src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
[root@han01 src]# tar jxvf php-5.6.32.tar.bz2

切换到php-5.6.32目录下,编译PHP5.6

[root@han01 src]# cd php-5.6.32/
[root@han01 src]# ./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
  • –prefix=/usr/local/php 表示指定它的安装目录
  • –with-apxs2=/usr/local/apache2.4/bin/apxs //apxs2,它是apache的一个工具,这个工具能让我们不用去人工的干涉它,它可以自动的帮你去把扩展的模块放到Apache中的modules目录里,并且在它的配置文件里加上一行load module
  • –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 //指定mysql的路径。
  • 这是三种不同的mysql驱动,原因是你想要把你的PHP和mysql相互通信,首先需要编译出支持它的模块来,因为在PHP代码里面,定义了连接mysql的命令,一段代码,若是没有相应的驱动,那根本是无法识别的
  • –with-mysql 和 –with-mysqli 是有区别的,它们两者功能是相同的,目的都是为了让PHP去支持mysql,老版本中使用 –with-mysql,新版本中使用 –with-mysqli ,在PHP7中就不再使用–with-mysql 了
  • –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 //指定PHP需要的模块,若是没有特殊的要求,直接复制这些参数即可,这些参数是通用的
configure: error: mcrypt.h not found. Please reinstall libmcrypt.

发现上述错误

解决方法:

若没有安装过eprl扩展源,则必须先安装epel-release包——>yum install -y epel-release

再来安装 libmcrypt-devel 包——>yum install -y libmcrypt-devel

安装后再次执行,检查一下,发现没问题,最后make && make install,安装完成

[root@han01 php-5.6.32]# echo $?
0
[root@han01 php-5.6.32]# make && make install

查看PHP目录/usr/local/php/

PHP核心的二进制文件,在/usr/local/php/bin/目录下

[root@han01 ~]# ls /usr/local/php/
bin  etc  include  lib  php

查看/usr/local/apache2.4/modules/libphp5.so文件大小

这个就是我们想要的扩展模块,apache和php结合起来,是通过这个.so 文件实现的

[root@han01 ~]# du -sh /usr/local/apache2.4/modules/libphp5.so
36M /usr/local/apache2.4/modules/libphp5.so

这时候若是想把/usr/local/php/bin/php 目录删除也没有问题,因为要的仅仅
是/usr/local/apache2.4/modules/libphp5.so文件

查看php加载的模块都有哪些,命令/usr/local/php/bin/php -m

[root@han01 ~]# /usr/local/php/bin/php -m 
[PHP Modules]
bz2
Core
ctype
date
dom
ereg

这些加载的模块都是静态的

PHP是作为Apache的模块存在的,查看Apache的模块

  • 可以看到最下方的 php5_module (shared) ,这个说明php是做为httpd 的一个扩展模块形式存在的
  • Apache需要去执行php的文件,需要借助于php module ,需要这个模块,需要这个.so 文件
    • 若是把 .so 一删除,那Apache肯定不支持php了
  • php5_module (shared) 这个模块非常重要
[root@han01 ~]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e009:8425:90b5:4c23. 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)

查看模块文件大小
ls -l /usr/local/apache2.4/modules/libphp5.so

[root@han01 ~]# ls -l /usr/local/apache2.4/modules/libphp5.so
-rwxr-xr-x. 1 root root 37743776 627 06:01 /usr/local/apache2.4/modules/libphp5.so

打开/usr/local/apache2.4/conf/httpd.conf文件

/usr/local/apache2.4/conf/httpd.conf 这是Apache的配置文件

[root@han01 ~]# vim /usr/local/apache2.4/conf/httpd.conf

去搜索php5.so,会发现自动增加了一行

若想使用文件中的那一个模块,将前面的 # 号去除即可使用
若想不使用哪个模块,只需要加一个 # 号即可

把配置文件拷贝到指定路径下

可以查看到PHP的一些信息,包括编译参数,Configuration File 的路径

[root@han01 ~]# /usr/local/php/bin/php -i |less -i

拷贝配置文件
cp php.ini-production /usr/local/php/etc/php.in

php.ini-development 这个是测试环境用的

php.ini-production 这个是线上生产环境用的

[root@han01 ~]# cd /usr/local/src/
[root@han01 src]# cd php-5.6.32/
[root@han01 php-5.6.32]# cp php.ini-production /usr/local/php/etc/php.ini

查看/usr/local/php/bin/php -i |less

加载了路径

Configuration File (php.ini) Path => /usr/local/php/etc
Loaded Configuration File => /usr/local/php/etc/php.ini
Scan this dir for additional .ini files => (none)

他人出现的问题解决方法:
https://blog.csdn.net/weixin_39663255/article/details/80459107


六、安装PHP7

cd /usr/local/src/
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
tar zxf php-7.1.6.tar.bz2
cd 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
make && make install
ls /usr/local/apache2.4/modules/libphp7.so
cp php.ini-production /usr/local/php7/etc/php.ini

切换到/usr/local/src/目录下,下载安装包,并解压

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

切换到php-7.1.6目录下

[root@han01 src]# cd php-7.1.6/
[root@han01 php-7.1.6]# 

初始化配置

这里php7和php5的区别:

  • –prefix=/usr/local/php7这里定义的目录名字是php7
  • –with-config-file-path=/usr/local/php7/etc这里定义的配置文件路径是php7
  • 这里只有–with-mysqli,没有–with-mysql,而其他的都类似
[root@han01 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

检查一下,然后make && make install

[root@han01 php-7.1.6]# echo $?
0
[root@han01 php-7.1.6]# make && make install

一台机器上安装两个php,两个PHP是可以同时存,但是Apache调用PHP的时候,需要指定好,在——> vim /usr/local/apache2.4/conf/httpd.conf 里面指定使用哪一个PHP即可

查看libphp7和5是不同的

/usr/local/apache2.4/modules/libphp7.so

[root@han01 php-7.1.6]# ls /usr/local/apache2.4/modules/libphp7.so
/usr/local/apache2.4/modules/libphp7.so
[root@han01 php-7.1.6]# du -sh /usr/local/apache2.4/modules/libphp7.so
37M /usr/local/apache2.4/modules/libphp7.so

查看php7所加载的模块,/usr/local/php7/bin/php -m,和php5基本是一致的

[root@han01 php-7.1.6]# /usr/local/php7/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
exif
fileinfo

查看Apache加载了几个php,会看到加载了php5和php7

[root@han01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e009:8425:90b5:4c23. 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)
 省略
  php5_module (shared)
 php7_module (shared)

若想去使用哪一个PHP,根据自己的实际需求

[root@han01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf

搜索php5.so

七、Apache和PHP结合

配置httpd支持php目录概要

  • httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
  • vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
    ServerName
    Require all denied
    AddType application/x-httpd-php .php
    DirectoryIndex index.html index.php
  • /usr/local/apache2.4/bin/apachectl -t //测试语法
  • /usr/local/apache2.4/bin/apachectl start //启动服务
  • netstat -lntp curl localhost
  • vim /usr/local/apache2.4/htodcs/test.php //增加如下内容

编辑httpd的配置文件

  • 在安装好Apache、mysql、httpd,但是还未结合在一起,虽然apche调用了php作为它的模块,但是还不知道是否能解析php,所以现在还是需要编辑Apache的配置文件
  • httpd主配置文件,在/usr/local/apache2.4/conf/httpd.conf下
    编辑四个地方
  • 定义ServerName,去除 # 号
  • 在/usr/local/apache2.4/bin/apachectl restart 乍一看是报错信息,其实只是一个警告信息,并不是错误,若想不看到这个提示,可以在 /usr/local/apache2.4/conf/httpd.conf 取消掉
    方法:在/usr/local/apache2.4/conf/httpd.conf 中搜索 /ServerName ,然后将 # - ServerName www.example.com:80 前的# 去除掉,保存退出即可
  • 把Require all denied 改成
  • 若是不更改,那么访问会是 403

第一处:取消警告信息

在运行/usr/local/apache2.4/bin/apachectl restart 会跳出警告信息

进入配置文件 vim /usr/local/apache2.4/conf/httpd.conf

[root@han01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf

将其中ServerName www.example.com:80前的#号删除

重新运行命令,还是不行,显示79行错误

[root@han01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl restart 
httpd not running, trying to start
/usr/local/apache2.4/bin/apachectl: 行 79: 55520 段错误               $HTTPD -k $ARGV

原因:是因为在最后调用了两个PHP,加载了两个PHP,导致冲突

解决方法:只需要注释掉一个PHP即可

加个#号

#LoadModule php7_module        modules/libphp7.so

注释掉后就正常了

[root@han01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl start 

查看httpd进程

因为在打开了ServerName,就不在提示警告信息了

[root@han01 php-7.1.6]# ps aux |grep httpd
root     55547  0.0  0.5 253628  8940 ?        Ss   19:03   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   55548  0.0  0.5 540456  8980 ?        Sl   19:03   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   55549  0.0  0.5 540456  8980 ?        Sl   19:03   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   55550  0.0  0.5 540456  8980 ?        Sl   19:03   0:00 /usr/local/apache2.4/bin/httpd -k start
root     55633  0.0  0.0 112720   984 pts/0    S+   19:04   0:00 grep --color=auto httpd

更改Require all denied

用浏览器访问自己虚拟机的IP,会发现无法访问

排查方法:

查看IP是否是通的,用物理机去ping 虚拟机的 IP

若IP是通的,再去判断80端口是否是通的——>用物理机去ping80端口

C:\Users\hhhhhxh>ping 192.168.0.115

正在 Ping 192.168.0.115 具有 32 字节的数据:
来自 192.168.0.115 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.115 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.115 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.115 的回复: 字节=32 时间<1ms TTL=64

192.168.0.115Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

C:\Users\hhhhhxh>telnet 192.168.0.115 80
'telnet' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
  • 因为windows 并没有打开telnet 客户端,所以会提示并没有这个命令
  • 打开telnet客户端——>注意:不要打开Telnet服务端,否则会监听23端口,不安全 (打开物理机的控制面板 –然后选择程序–再选择打开或关闭Windows功能–选择Telnet客户端,并打开)
  • 若是可以运行 telnet 命令,那出来的则是一个结果,显示80并不通,因为在linux虚拟机上,并没有打开80端口
C:\Users\hhhhhxh>telnet 192.168.0.115 80
正在连接192.168.0.115...无法打开到主机的连接。 在端口 80: 连接失败

在虚拟机上,使用iptables -nvL 命令,会查看到80端口并没有打开

若想要windows机器去访问它,还需要加上一个操作

临时加上80端口 :iptables -I INPUT -p tcp –dport 80 -j ACCEPT

[root@han01 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

再去物理机上访问虚拟机的IP,会显示一下内容

It works!

之前不能正常访问,就是由于防火墙的规则,没有加上80端口,不能正常访问

再CMD查看80端口,这样的界面表示80端口通了
这里写图片描述
在物理机中按 ctrl+] 退出来,然后在按 quit 字符退出
这是因为在/usr/local/apache2.4/conf/httpd.conf配置文件中,有一个Require all denied

将denied 改成 granted

<Directory />
    AllowOverride none
    Require all granted
</Directory>

在更改完配置文件,需要重新加载配置

/usr/local/apache2.4/bin/apachectl -t //检查你修改的配置文件是否存在错误

因为要支持php,所以要增加一行php相关的配置

搜索 /AddType,增加AddType application/x-httpd-php .php

再加引索页
搜索 /Index,加上index.php

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

检查配置是否有错误

[root@han01 ~]#  /usr/local/apache2.4/bin/apachectl -t
Syntax OK

重新加载配置文件

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

检查Apache是否支持解析php5

写一个测试php脚本

在访问的时候,访问的是htdocs下的文件

phpinfo,可以把php的相关信息打[root@han01 ~]# vi /usr/local/apache2.4/htdocs/1.php

<?php
phpinfo();
?>

这时在浏览器访问http://192.168.0.115/1.php
这里写图片描述
当看到php正常显示,如上图,那说明php支持支持解析

如果php不支持解析(以上四步骤错误一处),那么刷新页面显示出来的则是源代码(就是 1.php 文件中的代码)

如果遇到php无法解析,则去检查Apache的配置文件

  • 第一项,查看是否加载php5模块,使用/usr/local/apache2.4/bin/apachectl -M命令
  • 如果没有加载这个模块,查看这个模块是否存在。使用 ls /usr/local/apache2.4/modules/libphp5.so查看文件是否存在,若是文件都没有,那么肯定不会加载这个模块
  • 第二项,如果有文件,则没有显示php模块,那么就要去看apache的配置文件中有没有加载 libphp5 这一行配置,在文件中搜索/libphp5 ,如果没有这一行配置,那么肯定也是无法解析的
  • 第三项,检查配置文件中是否加载了 AddType application/x-httpd-php .php 这一行
  • 在 .php 前面有一行空格,需要注意下!不能遗忘!!!——>使用 /usr/local/apache2.4/bin/apachectl -t 可以检查出配置写错了
  • 第四项,检查是否加了 index.php
  • 在访问一个网站的时候,比如访问www.baidu.com的时候,并不用是www.baidu.com/index.php访问,会发现,两个访问出的页面是相同的,就是因为这里有索引页(或者叫做index页),它默认能跳转到这个页面下去,包括直接输入虚拟机ip的时候,也会访问到 It works!这是访问到的是 index.html ,就是因为我们定义了一个index

检查Apache是否支持解析php7

打开配置文件,注释掉php5,打开php7

[root@han01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
#LoadModule php5_module        modules/libphp5.so
LoadModule php7_module        modules/libphp7.so

快捷键 ctrl+r ,可以快速执行命令历史中所用过的一些命令

在快捷键 ctrl+r 之后,然后输入命令的一些字母,就会显示出你使用过的命令

检查配置文件是否存在语法错误,并重新加载配置文件

[root@han01 ~]# /usr/local/apache2.4/bin/apachectl -t 
Syntax OK
[root@han01 ~]# /usr/local/apache2.4/bin/apachectl graceful

用物理机访问虚拟机的ip,正常
这里写图片描述
在浏览器打开看到的phpinfo,和/usr/local/php7/bin/php -i |less看到的结果基本是一致的,只不过一个是文本形式,一个是图形化,图形化看起来更加直观,清晰明了

Apache配置文件

为什么可以在htdocs下面中可以访问到 index.html、1.php
这是因为在/usr/local/apache2.4/conf/httpd.conf配置文件中的 DocumentRoot 参数,定义了网站的根目录在哪里,域名就是定义的ServerName


扩展:

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 http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/programs/apxs.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/iamfishhh/article/details/80807367