超详细的LAMP编译安装理论+实践

LAMP(Web应用软件组合)

LAMP概述

  • LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。
  • LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MariaDB或MySQL(数据库管理系统或者数据库服务器)、PHP(或Perl、Python)网页编程j脚本语言。
  • 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的“解决方案包”(Solution Packages)。其他的方案包有苹果的WebObjects(最初是应用服务器),Java/J2EE和微软的.NET架构。
  • “LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。

为什么需要LAMP

  • 手动逐个编译安装各个组件,需要输入各种命令,且有可能会中途出错。
  • 对于想要成功搭建 LAMP 建站环境来说,可以节约大量时间和精力。

LAMP各组件作用

  • 平台
    Linux
    作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(AMP组件也支持Windows、UNIX等平台) 。
  • 前台
    Apache
    作为LAMP架构的前端,是一款功能强大,稳定性好的Web服务器程序,该服务器直接面向用户提供网站访问,发送网页,图片等文件内容。
  • 后台
    MySQL
    作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些信息。
  • 中间连接
    PHP/Perl/Python
    作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。

LAMP架构安装顺序

  • 各组件的安装顺序依次为Linux、Apache、MySQL、PHP。
  • 其中Apache和MySQL的安装并没有严格的顺序,PHP环境的安装一般放到最后安装,负责沟通 Web 服务器和数据库系统以协同工作。

A(Apache)

Apache概述

  • Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
  • Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器。

Apacheweb服务器软件所拥有特性

  • 支持最新的HTTP/1.1通信协议
  • 拥有简单而强有力的基于文件的配置过程
  • 支持通用网关接口
  • 支持基于IP和基于域名的虚拟主机
  • 支持多种方式的HTTP认证
  • 集成Perl处理模块
  • 集成代理服务器模块
  • 支持实时监视服务器状态和定制服务器日志
  • 支持服务器端包含指令(SSI)
  • 支持安全Socket层(SSL)
  • 提供用户会话过程的跟踪
  • 支持FastCGI
  • 通过第三方模块可以支持JavaServlets

编译安装Apache httpd服务(详解+图释)

  • 恢复快照后一定要注意内核,因为之前快照是2核内存,后面编译时使用4核编译,如果这里不留意进行修改的话后面编辑时将无法成功
    在这里插入图片描述
  • 将相关组件拖到/opt/目录里并挂载安装环境依赖包
[root@localhost ~]# cd /opt/
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
apr-1.6.2.tar.gz  apr-util-1.6.0.tar.gz  httpd-2.4.29.tar.bz2  rh
【*apr组件包用于支持Apache上层应用跨平台,提供底层接口库,能有效的降低并发连接数、降低进程和减少访问堵塞】

[root@localhost opt]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost opt]# yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
【gcc(C语言的编译器)gcc-c++(C++的编译器)
make(源代码编译器,源代码转换成二进制文件)
pcre(pcre是一个Perl函数库,包括perl 兼容的正则表达式库)
pcre-devel(perl的接口开发包)
expat-devel(用于支持网站解析HTML、XML文件)
perl(perl语言编译器)】

......
作为依赖被安装:
  cpp.x86_64 0:4.8.5-16.el7                glibc-devel.x86_64 0:2.17-196.el7   glibc-headers.x86_64 0:2.17-196.el7    
  kernel-headers.x86_64 0:3.10.0-693.el7   libmpc.x86_64 0:1.0.1-3.el7         libstdc++-devel.x86_64 0:4.8.5-16.el7  

完毕!
  • 解压配置软件模块及4核编译安装
[root@localhost opt]# tar zxvf apr-1.6.2.tar.gz
......
apr-1.6.2/build/PrintPath
apr-1.6.2/build/libaprapp.dsp
apr-1.6.2/apr.dsw
apr-1.6.2/libapr.dep
[root@localhost opt]# tar zxvf apr-util-1.6.0.tar.gz
......
apr-util-1.6.0/dbm/apr_dbm_sdbm.c
apr-util-1.6.0/dbm/apr_dbm_gdbm.c
apr-util-1.6.0/dbm/NWGNUdbmgdbm
apr-util-1.6.0/libaprutil.dsp
[root@localhost opt]# tar jxvf httpd-2.4.29.tar.bz2
......
httpd-2.4.29/test/test_select.c
httpd-2.4.29/test/time-sem.c
httpd-2.4.29/VERSIONING
[root@localhost opt]# mv apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util
[root@localhost opt]# cd /opt/httpd-2.4.29/
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \   【指定httpd服务程序的安装路径】
> --enable-so \                 【开启动态加载模块支持,使httpd服务程序具备进一步扩展功能的能力】
> --enable-rewrite \            【开启网页地址重写功能,用于网站优化、防盗链及目录迁移维护】
> --enable-charset-lite \       【开启字符集支持,以便支持使用各种字符集编码的页面】     
> --enable-cgi                  【开启CGI(通用网关接口)脚本程序支持,便于网站的外部扩展应用访问能力】
......
......
configure: summary of build options:

    Server Version: 2.4.29
    Install prefix: /usr/local/httpd
    C compiler:     gcc -std=gnu99
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E

[root@localhost httpd-2.4.29]# make -j4 && make install
......
......
mkdir /usr/local/httpd/man
mkdir /usr/local/httpd/man/man1
mkdir /usr/local/httpd/man/man8
mkdir /usr/local/httpd/manual
make[1]: 离开目录“/opt/httpd-2.4.29
  • 优化配置文件路径
  • 并把httpd服务的可执行程序文件放入路径环境变量的目录中便于系统识别
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/ * /usr/local/bin/
[root@localhost httpd-2.4.29]# cd /usr/local/bin/
[root@localhost bin]# ls
ab         apr-1-config  apxs      dbmmanage  envvars-std  htcacheclean  htdigest  httpd      logresolve
apachectl  apu-1-config  checkgid  envvars    fcgistarter  htdbm         htpasswd  httxt2dbm  rotatelogs
  • 关闭防火墙
[root@localhost bin]# systemctl stop firewalld.service 
[root@localhost bin]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost bin]# setenforce 
[root@localhost bin]# setenforce 0
  • 添加httpd系统服务方式一
[root@localhost bin]# vim /lib/systemd/system/httpd.service

[Unit]
Description=The Apache HTTP Server                    【相关描述】                            
After=network.target                                  【描述服务类别】                                                               
[Service]
Type=forking                                          【后台运行方式】                                                                   
PIDFile=/usr/local/httpd/logs/httpd.pid               【PID文件位置】                          
ExecStart=/usr/local/bin/apachectl $OPTIONS           【启动服务】                       
ExecReload=/bin/kill -HUP $MAINPID                    【根据PID重载配置】                               
[Install]
WantedBy=multi-user.target
[root@localhost bin]# systemctl start httpd.service
[root@localhost bin]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
  • 添加httpd系统服务方式二
[root@localhost bin]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd	【用于service服务管理】
chmod +x /etc/init.d/httpd
vi /etc/init.d/httpd
#!/bin/bash											                        【在第一行前插入新行,添加此三行内容】
# chkconfig: 35 85 2135级别自动运行  第85个启动 第21个关闭】
# description: Apache is a World Wide Web server

chkconfig --add httpd     	                                            	【将httpd服务加入到service管理器】

[root@localhost bin]# systemctl start httpd.service
或
[root@localhost bin]# service httpd start
  • 修改httpd 服务配置文件
[root@localhost bin]# vim /etc/httpd.conf
52 Listen 192.168.131.8:80                 【将配置文件里的第52行修改成本机IP地址,端口号80197 ServerName www.qz.com:80               【将配置文件里的第197行的注释取消,并修改域名地址端口号80221 DocumentRoot "/usr/local/httpd/htdocs" 【配置文件221行默认首页存放路径】
255     DirectoryIndex index.html          【配置文件255行默认首页文件名设置】
[root@localhost bin]# httpd -t             【检查配置文件的配置项是否有误】
Syntax OK
[root@localhost bin]# apachectl -t         【两条命令都可用于检查】
Syntax OK
  • 浏览器访问验证
[root@localhost bin]# vim /usr/local/httpd/htdocs/index.html 

<html><body><h1>apache is OK!!!</h1></body></html>

[root@localhost bin]# echo "192.168.131.9 www.qz.com" >> /etc/hosts
[root@localhost bin]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.9 www.qz.com

在这里插入图片描述

M(MySQL)

MySQL概述

  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
  • MySQL的关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
  • MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,所以一般中小型网站的开发都选择 MySQL 作为网站数据库。

MySQL系统特性

  • mySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
  • 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
  • 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
  • 支持多线程,充分利用 CPU 资源。
  • 优化的 SQL查询算法,有效地提高查询速度。
  • 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
  • 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。
  • 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
  • 提供用于管理、检查、优化数据库操作的管理工具。
  • 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • 支持多种存储引擎。
  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 使用标准的 SQL数据语言形式。
  • MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。
  • MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。
  • 在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性
  • 复制全局事务标识,可支持自我修复式集群
  • 复制无崩溃从机,可提高可用性
  • 复制多线程从机,可提高性能
  • 原生JSON支持、多源复制、GIS的空间扩展

编译安装Mysqld服务(详解+图释)

  • 将相关软件包传到/opt/目录并安装环境依赖包
[root@www ~]# cd /opt/
[root@www opt]# rz -E
rz waiting to receive.
[root@www opt]# ls
apr-1.6.2.tar.gz       boost_1_59_0.tar.gz  httpd-2.4.29.tar.bz2  rh
apr-util-1.6.0.tar.gz  httpd-2.4.29         mysql-5.7.17.tar.gz
[root@www opt]# yum -y install \
> gcc \
> gcc-c++\
> ncurses \                  【字符终端下图形互动功能的动态库】
> ncurses-devel \            【ncurses开发包】
> bison \                    【语法分析器】
> cmake                      【mysql需要用cmake编译安装】

  • 解压并配置软件模块并进行4核编译与安装
[root@www opt]# tar zxvf mysql-5.7.17.tar.gz
......
mysql-5.7.17/zlib/zlib.h
mysql-5.7.17/zlib/zutil.c
mysql-5.7.17/zlib/zutil.h
[root@www opt]# tar zxvf boost_1_59_0.tar.gz
......
boost_1_59_0/tools/quickbook/test/xml_escape-1_2.quickbook
boost_1_59_0/tools/quickbook/test/xml_escape-1_5.gold
boost_1_59_0/tools/quickbook/test/xml_escape-1_5.quickbook
[root@www opt]# mv boost_1_59_0 /usr/local/boost       【重命名】
[root@www opt]# cd /opt/mysql-5.7.17/
[root@www mysql-5.7.17]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \            【指定mysql的安装路径】
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \      【指定mysql进程监听套接字文件(数据库连接文件)的存储路径】
> -DSYSCONFDIR=/etc \                                  【指定配置文件的存储路径】
> -DSYSTEMD_PID_DIR=/usr/local/mysql \                 【指定进程文件的存储路径】
> -DDEFAULT_CHARSET=utf8  \                            【指定默认使用的字符集编码。我这里使用的是utf8】
> -DDEFAULT_COLLATION=utf8_general_ci \                【指定默认使用的字符集校对规则】
> -DWITH_EXTRA_CHARSETS=all \                          【指定支持其他字符集编码】
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \                   【进行INNOBASE存储引擎安装】         
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \                    【进行ARCHIVE存储引擎安装】
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \                  【进行BLACKHOLE存储引擎安装】
> -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \                 【进行FEDERATED存储引擎安装】
> -DMYSQL_DATADIR=/usr/local/mysql/data \              【指定数据库文件的存储路径】
> -DWITH_BOOST=/usr/local/boost \                      【指定boost的路径。若使用mysql-boost集成包安装则-DWITH_BOOST=boost】
> -DWITH_SYSTEMD=1                                     【生成便于systemctl管理的文件】
......
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/mysql-5.7.17

【如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除然后再重新CMAKE,否则错误依旧】
【存储引擎选项:MYISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。】
【静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1
可用的存储引擎值有:ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), 
PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)[root@www mysql-5.7.17]# make && make install       【mysql编译过程时间较长】
......
......
  • 创建mysql用户并修改mysql配置文件
  • 更改mysql安装目录和配置文件的属主属组并设置路径环境变量
[root@localhost /]# useradd -M -s /sbin/nologin  mysql
[root@localhost /]# vim /etc/my.cnf
【删除原配置项,再重新添加下面内容】
[client]                                   【客户端设置】
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock

[mysql]                                    【服务端设置】
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
auto-rehash                                【开启自动补全功能】

[mysqld]                                   【服务全局设置】
user = mysql                               【设置管理用户】
basedir=/usr/local/mysql                   【指定数据库的安装目录】
datadir=/usr/local/mysql/data              【指定数据库文件的存储路径】
port = 3306                                【指定端口】
character-set-server=utf8                  【设置服务器字符集编码格式为utf8】
pid-file = /usr/local/mysql/mysqld.pid     【指定pid 进程文件路径】
socket=/usr/local/mysql/mysql.sock         【指定数据库连接文件】
bind-address = 0.0.0.0                     【设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开】
skip-name-resolve                          【禁用DNS解析】
max_connections=2048                       【设置mysql的最大连接数】
default-storage-engine=INNODB              【指定默认存储引擎】
max_allowed_packet=16M                     【设置数据库接收的数据包大小的最大值】
server-id = 1                              【指定服务ID号】

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
----------------------------------------------------------------------------------------------------------
sql_mode常用值如下:
NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
STRICT_TRANS_TABLES
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_AUTO_CREATE_USER
禁止GRANT创建密码为空的用户
NO_AUTO_VALUE_ON_ZERO
mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错
NO_ZERO_IN_DATE
不允许日期和月份为零
NO_ZERO_DATE
mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL
PIPES_AS_CONCAT
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
----------------------------------------------------------------------------------------------------------

[root@localhost /]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost /]# chown mysql:mysql /etc/my.cnf
[root@localhost /]# echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@localhost /]# source /etc/profile
  • 初始化数据库并添加mysqld系统服务
[root@localhost /]# cd /usr/local/mysql/bin/
[root@localhost bin]# ./mysqld \
> --initialize-insecure \               【生成初始化密码为空】
> --user=mysql \                        【指定管理用户】
> --basedir=/usr/local/mysql \          【指定数据库的安装目录】
> --datadir=/usr/local/mysql/data       【指定数据库文件的存储路径】
2021-03-25T09:17:08.569960Z 0 [Warning] TIMESTAMP with implicit DEFAULT value ......
......
2021-03-25T09:17:11.600970Z 1 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
[root@localhost bin]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
【用于systemctl服务管理】
[root@localhost bin]# systemctl daemon-reload              【刷新识别 】
[root@localhost bin]# systemctl start mysqld.service       【开启服务】
[root@localhost bin]# systemctl enable mysqld              【开机自启动】
Created symlink from /etc/systemd/system/multi-   user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost bin]# netstat -anpt | grep 3306            【查看端口】
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      60725/mysqld 
  • 修改mysql 的登录密码并授权远程登录
[root@localhost bin]# mysqladmin -u root -p password "5514"
【给root账号设置密码为5514,提示输入的是原始密码(为空)】
Enter password: 
......
connection to ensure password safety.
[root@localhost bin]# mysql -u root -p

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
......
......

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all privileges on *.* to 'root'@'%' identified by '5514';
【授予root用户可以在所有终端远程登录,使用的密码是5514,并对所有数据库和所有表有操作权限】
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show databases;
【查看当前已有的数据库】
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye

P(php)

php概述

  • PHP(Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
  • PHP脚本程序主要应用于Web服务端开发,命令行和编写桌面应用程序。PHP支持和所有web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP 已经支持了对Java对象的即时连接,并且可以透明地将其用作PHP对象。

php语言特点

  • 开源免费
    由于PHP的解释器的源代码是公开的,所以安全系数较高的网站可以自己更改PHP的解释程序。另外,PHP 运行环境的使用也是免费的。
  • 快捷高效
    PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。 PHP可以与很多主流的数据库建立起连接,如MySQL、ODBC、Oracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。
    过程和面向对象并用,在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用,这是其它很多编程语言做不到的。
  • 拓展性强
    PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。
    PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。
    PHP 语言在补丁漏洞升级过程中,核心部分植入简单易行,且速度快。
    PHP 语言在数据库应用过程中,可以从数据库调取各类数据,执行效率高。

编译安装php服务(详解+图释)

  • 将安装PHP时所需的软件包拖到/opt/目录下并安装GD库和GD库关联程序,用来处理和生成图片
[root@localhost bin]# cd /opt/
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
boost_1_59_0.tar.gz  mysql-5.7.17  mysql-5.7.17.tar.gz  php-7.1.10.tar.bz2  rh
[root@localhost opt]# yum -y install \
> gd \
> libjpeg libjpeg-devel \
> libpng libpng-devel \
> freetype freetype-devel \
> libxml2 libxml2-devel \
> zlib zlib-devel \
> curl curl-devel \
> openssl openssl-devel
......
......
作为依赖被安装:
  keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-8.el7  libcom_err-devel.x86_64 0:1.42.9-10.el7
  libselinux-devel.x86_64 0:2.5-11.el7     libsepol-devel.x86_64 0:2.5-6.el7 libverto-devel.x86_64 0:0.2.5-4.el7    
  pcre-devel.x86_64 0:8.32-17.el7          xz-devel.x86_64 0:5.2.2-1.el7    

完毕!
  • 配置软件模块及4核编译安装
[root@localhost opt]# tar jxvf php-7.1.10.tar.bz2
......
php-7.1.10/win32/fnmatch.h
php-7.1.10/win32/ftok.c
php-7.1.10/win32/select.c==
[root@localhost opt]# cd /opt/php-7.1.10/
[root@localhost php-7.1.10]# ./configure \
> --prefix=/usr/local/php7 \                         【指定将 PHP 程序的安装路径】
> --with-apxs2=/usr/local/httpd/bin/apxs \           【指定Apache httpd服务提供的apxs 模块支持程序的文件位置】
> --with-mysql-sock=/usr/local/mysql/mysql.sock \    【指定mysql 数据库连接文件的存储路径】
> --with-config-file-path=/usr/local/php7 \          【设置 PHP 的配置文件 php.ini 将要存放的位置】
> --with-mysqli \
【添加 MySQL 扩展支持 #mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定】
> --with-zlib \                                      【支持zlib功能,提供数据压缩】
> --with-curl \                                      【开启curl扩展功能,实现HTTP的Get下载和Post请求的方法】
> --with-gd \                                        【激活gd 库的支持】
> --with-jpeg-dir \                                  【激活jpeg 的支持】
> --with-png-dir \                                   【激活png 的支持】
> --with-freetype-dir \
> --with-openssl \
> --enable-mbstring \                                【启用多字节字符串功能,以便支持中文等代码】
> --enable-xml \                                     【开启扩展性标记语言模块】
> --enable-session \                                 【会话】
> --enable-ftp \                                     【文本传输协议】
> --enable-pdo \                                     【函数库】
> --enable-tokenizer \                               【令牌解释器】
> --enable-zip                                       【ZIP压缩格式】
 
[root@localhost php-7.1.10]# make -j4 && make install
...编译过程略....
  • 复制模版文件作为PHP 的主配置文件,并进行修改
[root@localhost php-7.1.10]# cp /opt/php-7.1.10/php.ini-development /usr/local/php7/php.ini 
【在测试环境时使用php.ini-development文件,但是在生产环境时使用php.ini-production文件】
[root@localhost php-7.1.10]# vim /usr/local/php7/php.ini
【修改1170行内容并取消注释939行并修改】
1170 mysqli.default_socket = /usr/local/mysql/mysql.sock
 939 date.timezone = Asia/Shanghai
  • 优化PHP 的可执行程序文件并放入路径环境变量的目录中便于系统识别
[root@localhost php-7.1.10]# ln -s /usr/local/php/bin7/ * /usr/local/bin/
[root@localhost php-7.1.10]# php -m             【查看PHP 加载了哪些模块】
[PHP Modules]
Core
......
zlib

[Zend Modules]
  • 修改httpd 服务的配置文件,让apache支持PHP
[root@localhost php-7.1.10]# vim /etc/httpd.conf 
394     AddType application/x-httpd-php .php             【在393行下面插入两行内容】
395     AddType application/x-httpd-php-source .phps
256     DirectoryIndex index.html index.php              【修改256行的首页文件名设置】
156 LoadModule php7_module        modules/libphp7.so     【搜索检查支持php7的2个模块是否存在】
  • 验证php测试页
[root@localhost php-7.1.10]# rm -rf /usr/local/httpd/htdocs/index.html
[root@localhost php-7.1.10]# vim /usr/local/httpd/htdocs/index.php

<?php
phpinfo();
?>
[root@localhost php-7.1.10]# systemctl restart httpd.service

在这里插入图片描述

安装论坛

  • 创建数据库,并进行授权
[root@localhost php-7.1.10]# mysql -u root -p
mysql> CREATE DATABASE bbs;             【创建一个数据库】
mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY '5514';
【把bbs数据库里面所有表的权限授予给bbsuser,并设置密码5514】
mysql> flush privileges;                【刷新数据库】
mysql> show databases;
  • 解压论坛压缩包并更改论坛目录的属主
[root@localhost php-7.1.10]# unzip /opt/Discuz_X3.4_SC_UTF8.zip -d /opt/dis
[root@localhost php-7.1.10]# cd /opt/dis/dir_SC_UTF8/
[root@localhost php-7.1.10]# cp -r upload/ /usr/local/httpd/htdocs/bbs	                      【上传站点更新包】
[root@localhost php-7.1.10]# ps aux                                                          
【查看发现论坛进程的用户名是daemon】
daemon   100496  0.0  0.8 1438540 16540 ?       Sl   09:24   0:00 /usr/local/httpd/bin/htt
daemon   100497  0.0  1.9 2084960 38796 ?       Sl   09:24   0:00 /usr/local/httpd/bin/htt
daemon   100498  0.0  2.2 2134968 45020 ?       Sl   09:24   0:00 /usr/local/httpd/bin/htt
root     100601  0.0  0.1 313624  3196 ?        Sl   09:25   0:00 /usr/libexec/gvfsd-metad
root     100714  0.0  0.0      0     0 ?        S    09:34   0:00 [kworker/0:2]
daemon   100824  0.0  1.1 1918596 22400 ?       Sl   09:39   0:00 /usr/local/httpd/bin/htt
[root@localhost php-7.1.10]# cd /usr/local/httpd/htdocs/bbs
[root@localhost bbs]# chown -R daemon ./config
[root@localhost bbs]# chown -R daemon ./data
[root@localhost bbs]# chown -R daemon ./uc_client
[root@localhost bbs]# chown -R daemon ./uc_server/data
  • 浏览器访问验证
    论坛页面访问
    http://192.168.131.13/bbs
    数据库服务器:localhost ###本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号
    数据库名字:bbs
    数据库用户名:bbsuser
    数据库密码:5514
    管理员账号:admin
    管理员密码:5514
  • 论坛后台管理员页面
    http://192.168.131.13/bbs/admin.php

猜你喜欢

转载自blog.csdn.net/TaKe___Easy/article/details/115139504