从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)

发布于:2025-09-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、LNMP架构介绍与准备

 1.1、LNMP简介

        LNMP是一组众所周知的Web网站服务器架构环境,即由【Linux+Nginx+MySQL+PHP(MySQL有时也指 Mariadb)】组合成一个高性能、轻量、稳定、扩展性强的Web网站服务器架构环境。

        Nginx (“engine x”)是一个轻量级、高性能的HTTP和反向代理服务器,负载均衡服务器。Nginx的官方网站为【nginx.org】。MySQL分为社区版和商业版,本文将以社区版为基础进行讲解。PHP是一个使用者最多、运行最快、入门最简单的脚本语言。

 1.2、应用环境准备

应用环境准备
序号 应用环境准备
1 一台物理机或虚拟机,使⽤RHEL9/Almalinux9.1及其更高系统(192.168.1.9)
2 Nginx1.28版本
3 Mysql8.4.6LTS版本
4 PHP8.4.5版本

注意:对于Linux系统,需要先关闭Selinux

#1-永久禁用Linux的Selinux
grubby --update-kernel ALL --args selinux=0

#2-将【/etc/selinux/config】文件中的【SELINUX=enforcing】改为【SELINUX=disabled】
vi /etc/selinux/config

#3-重启Linux系统让selinux的禁用生效
reboot -h now

二、Nginx+Mysql+PHP环境安装部署

 2.1、下载源码安装部署Nginx

使用源码安装配置Linux上的Web服务器——Nginx的保姆级教程https://blog.csdn.net/xiaochenXIHUA/article/details/150780215?spm=1001.2014.3001.5501

#下载源码安装Nginx的详细流程步骤

#0-安装Nginx所依赖的zlib、pcre、openssl程序和编译环境
yum -y install zlib pcre pcre-devel openssl openssl-devel
yum install -y gcc gcc-c++ make

#1-下载【nginx-1.28.0.】源码包到【/data目录下】
cd /data
wget http://nginx.org/download/nginx-1.28.0.tar.gz

#2-解压下载好的Nginx源码压缩包
tar -zxvf nginx-1.28.0.tar.gz

#3-进入解压好的Nginx目录里面
cd nginx-1.28.0/
 
#4-检查Nginx的编译环境是否正常,是否具备编译条件(若不具备则会检查后给出对应的提示,按照提示安装即可)
./configure
 
#5-检查编译条件并且配置对应的通用参数内容
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre
 
#6-编译Nginx源码
make
 
#7-将编译好的内容拷贝到指定目录下
make install

#8-查看编译安装好的Nginx(由于我们指定的Nginx的安装路径是【/usr/local/nginx/】因此我们直接进入该路径下查看)
cd /usr/local/nginx/

#9-创建Nginx的用户nginx并查看
useradd -s /sbin/nologin nginx
id nginx

#10-修改Nginx的配置文件(设置【user  nginx;】【worker_processes auto;】)后保存退出
vi /usr/local/nginx/conf/nginx.conf

user  nginx;
worker_processes auto;


#10-创建Nginx的服务内容
#10.1-创建Nginx服务文件
vi /etc/systemd/system/nginx.service
 
#10.2-配置Nginx服务文件的内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

#11-使用systemctl管理Nginx服务并设置开机自启
#11.1-重载nginx服务
systemctl daemon-reload
 
#11.2-启动nginx服务
systemctl start nginx.service
 
#11.3-查看nginx服务状态
systemctl status nginx.service
 
#11.4-设置nginx服务开机自启动
systemctl enable nginx.service

#11.5-查看nginx的进程信息
ps -ef | grep nginx
 
#11.6-停止nginx服务
systemctl stop nginx

#11.7-查看已有nginx的编译所有配置信息和版本(若是yum安装的Nginx则直接使用【nginx -V】即可)
whereis nginx
/usr/local/nginx/sbin/nginx -V

#12-检查防火墙,并永久放开80端口
#12.1-查看nginx运行程序情况
netstat -antlp | grep nginx
 
#12.2-查看当前开放的防火墙列表
firewall-cmd --list-port
 
#12.3-永久开放80端口(如没有开放则需要开放一下)
firewall-cmd --zone=public --add-port=80/tcp --permanent
 
#12.4-重载防火墙
firewall-cmd --reload
 
#12.5-查看服务器本机的IP地址新
ifconfig

 2.2、二进制文件安装部署Mysql

#使用二进制文件安装Mysql步骤流程:

#1-进入【/data】目录下载mysql8.4.6二进制文件压缩包
cd /data
wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz

#2-解压mysql二进制压缩包文件到指定的【/usr/local/mysql】路径下
mkdir -p /usr/local/mysql
tar -xvf mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz -C /usr/local/mysql

#3-进入【/usr/local/mysql】路径下并修改解压好的mysql名称
cd /usr/local/mysql/
mv mysql-8.4.6-linux-glibc2.28-x86_64 mysql-8.4.6

#4-进入mysql-8.4.6文件夹并分别创建etc、data、logs文件夹
cd mysql-8.4.6/
mkdir data
mkdir etc
mkdir logs

#5-查看mysql用户是否存在(若不存在则创建)
id mysql
useradd mysql

#6-进入mysql的etc文件夹(/usr/local/mysql/mysql-8.4.6/etc)创建【my.cnf】文件并配置内容
cd ./etc/
vi my.cnf

[mysqld]
datadir=/usr/local/mysql/mysql-8.4.6/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/mysql-8.4.6/logs/mysqld-error.log
pid-file=/usr/local/mysql/mysql-8.4.6/logs/mysqld.pid
port=3336
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#默认时区(东八区)
default-time-zone='+8:00'
#数据库日志时间匹配系统时区
log_timestamps=system
#表名和字段名不区分大小写
lower_case_table_names=1

         
#7-将mysql文件夹及其内容都授权给mysql用户
chown -R mysql:mysql /usr/local/mysql/mysql-8.4.6

#8-初始化mysql数据库(若没有问题则该命令执行后不会有任何提示,有提示就是有问题需要排查解决了)
/usr/local/mysql/mysql-8.4.6/bin/mysqld  --defaults-file=/usr/local/mysql/mysql-8.4.6/etc/my.cnf --initialize --user=mysql

#9-验证初始化mysql数据库是否正常(可进入【/usr/local/mysql/mysql-8.4.6/data】目录查看是否有内容,大约有22个文件则表示没问题)查看【/usr/local/mysql/mysql-8.4.6/logs】下是否存在【mysqld.log】文件
ll /usr/local/mysql/mysql-8.4.6/data/
ll /usr/local/mysql/mysql-8.4.6/logs/

#10-手动启用mysql服务测试(如下可以指定默认的配置文件【 --defaults-file=/usr/local/mysql/mysql-8.4.6/etc/my.cnf】)
/usr/local/mysql/mysql-8.4.6/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.4.6/etc/my.cnf

#11-查看mysql的进程、网络端口内容(查看到对应的mysql进程与网络端口与我们配置的一致表示正常;确认正常后即可杀死该进程)
ps -ef | grep mysql
netstat -antlp | grep mysql

#12-配置mysql服务
vi /etc/systemd/system/mysqld.service

[Unit]
Description=MySQL Server 8.4.6
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/mysql-8.4.6/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.4.6/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target


#13-使用systemctl管理mysql服务并设置mysql服务开机自启
#13.1-重载所有服务
systemctl daemon-reload

#13.2-启动mysql服务
systemctl start mysqld.service

#13.3-查看mysql服务状态
systemctl status mysqld.service

#13.4-设置mysql服务开机自启
systemctl enable mysqld.service 

#13.5-停止mysql服务
systemctl stop mysqld.service

#14-查看mysql的Root用户临时密码并重置(在【/usr/local/mysql/mysql-8.4.6/logs/mysqld-error.log】)
head -n 20 /usr/local/mysql/mysql-8.4.6/logs/mysqld-error.log
/usr/local/mysql/mysql-8.4.6/bin/mysql -uroot -p临时密码
alter user 'root'@'localhost' identified by 'abc123456';
#创建任意主机都可以远程连接到该服务器mysql的账号命令如下:
create user 用户名@'%' identified by '密码';
#退出mysql
exit

#15-放开防火墙的3336端口(若有需要的话)
firewall-cmd --zone=public --add-port=3336/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port

#16-可以重启Linux服务器后查看mysql是否启动验证

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程_mariadb给用户授权https://blog.csdn.net/xiaochenXIHUA/article/details/140664884

#更详细的my.cnf配置文件内容如下【这个配置内容可以根据自己的项目实际需要自行选择配置】:
[mysqld]
bind-address=0.0.0.0
#端口号
port=3336
#用户
user=mysql

#默认存储引擎
default-storage-engine=INNODB

#默认字符集编码
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

#mysql程序路径
basedir=/usr/local/mysql/mysql-8.4.6
#mysql数据路径
datadir=/usr/local/mysql/mysql-8.4.6/data
socket=/tmp/mysql.sock
#进程文件
pid-file=/usr/local/mysql/mysql-8.4.6/logs/mysqld.pid

#通用查询
#用于控制MySQL的日志输出格式,可以设置为FILE、TABLE或NONE。当设置为FILE时,日志将被写入到指定的文件中,这通常用于记录慢查询日志和一般日志
log-output=FILE
#开启 general log 将所有到达MySQL SQL语句记录下来。一般不会开启开功能,因为log的量会非常庞大
general-log=0
general_log_file=/usr/local/mysql/mysql-8.4.6/logs/mysql-general.log

#慢查询
#查询执行时间的阈值(单位是秒)。当查询的执行时间超过这个阈值时,MySQL将会将该查询记录到慢查询日志中
long_query_time=3
#启动慢查询1表示开启,0表示关闭
slow_query_log=1
slow_query_log_file=/usr/local/mysql/mysql-8.4.6/logs/mysql-slow.log
#错误日志存放位置
log-error=/usr/local/mysql/mysql-8.4.6/logs/mysqld-error.log

#表名和字段名不区分大小写
lower_case_table_names=1

#同一客户端连接尝试失败次数,超出次数即被冻结
max_connect_errors=128

#数据库开启的最大进程连接数
max_connections=600
#设置在网络传输中一次消息传输量的最大值
max_allowed_packet = 64M
#默认时区(东八区)
default-time-zone='+8:00'
#数据库日志时间匹配系统时区
log_timestamps=system

#在并发连接数较高的情况下,需要确保table_open_cache的值足够大,以便能够存储所有并发连接中涉及的表。假设如果有600个并发连接,每个连接中涉及的表的最大数量是N,那么table_open_cache的值至少应该设置为600*N
#table_open_cache=2000
#设置内存临时表的最大大小
#tmp_table_size=512M
#专门用于MyISAM存储引擎的索引缓存。这个参数的设置对数据库性能有着显著的影响,尤其是在处理索引读取操作时,在内存中缓存索引数据可以显著提高数据库查询的速度,因为它减少了从磁盘读取数据的次数。
#key_buffer_size=512M
#控制事务日志的刷新策略。其默认值为 1,即每次事务提交时都会将日志缓冲区的数据写入日志文件,并立即刷新到磁盘。
#innodb_flush_log_at_trx_commit=1
#是 InnoDB 存储引擎中用于写入磁盘上的日志文件的缓冲区大小。默认值为16MB。设置合适的大小可以减少写操作,提高性能。
#innodb_log_buffer_size=16M
# *极其重要的数据库内存参数,一般建议将服务器物理内存的 50% 到 70% 分配给 innodb_buffer_pool_size,这里8G及以下内存适合生产环境低并发用户
innodb_buffer_pool_size=3G
#用于定义重做日志文件(Redo Log)的大小。它直接影响数据库的性能、事务处理效率以及崩溃恢复时间。(innodb_log_file_size 的总可用日志空间由以下公式计算:总日志空间 = innodb_log_file_size × innodb_log_files_in_group
默认情况下,innodb_log_files_in_group 的值为 2,因此调整 innodb_log_file_size 即可控制总日志空间。日志文件越大,崩溃后的恢复时间越长。一般情况下,每 1GB 的日志文件恢复时间约为 5 分钟。)
innodb_redo_log_capacity=1G
#innodb_log_file_size=1G#innodb_log_file_size已经弃用使用innodb_redo_log_capacity替代
#设置每次自动扩展数据文件时增长的大小(单位是MB)
innodb_autoextend_increment=64

#该参数值请根据innodb_buffer_pool_size大小来设置,4G以下不需要设置该参数
#当innodb_buffer_pool_size在8G以上时可以设置为4;32G以上可以设置为8
#innodb_buffer_pool_instances=4
#定义了 InnoDB 层能够同时打开的文件数量上限
innodb_open_files=300
#设置是否每个数据库的每个表都会生成一个数据空间,1表示开启
innodb_file_per_table=1

[client]
#修改默认编码
default-character-set=utf8mb4

到这里恭喜你,已经全部正确安装配置好了mysql数据库,可以正常使用了。

Centos8安装配置Mariadb数据库_centos8安装mariadbhttps://blog.csdn.net/xiaochenXIHUA/article/details/127270742

 2.3、下载源码安装部署PHP

#下载PHP源码进行安装部署

#1-下载PHP的源码并解压
wget https://php.net/distributions/php-8.4.12.tar.gz
tar -zxvf php-8.4.12.tar.gz

#2-安装编译PHP源码所需的依赖库
yum install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel  libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel sqlite-devel libzip -y

#3-进入解压好的php目录配置php、并检查是否存在www用户,不存在则创建
cd /data/php-8.4.12/
useradd www
id www

./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip

#4-解决检查环境配置报错【configure: error: Package requirements (oniguruma) were not met:】问题,先下载和安装缺失的【oniguruma】包在手动安装后再次执行【./configure 及其后面添加的配置内容命令】检查环境
 wget https://repo.almalinux.org/almalinux/9/CRB/x86_64/os/Packages/oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm
 yum install oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm -y

#5-解决检查环境配置报错【configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:】问题,先下载和安装缺失的【libzip】包在手动安装后再次执行【./configure 及其后面添加的配置内容命令】检查环境
yum remove libzip libzip-deve -y
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"

#5.1-检查libzip是否编译成功(有结果显示就表示成功)
pkg-config --libs libzip
pkg-config --list-all|grep libzip

#5.1-进入php的源码路径再次执行环境检查
cd /data/php-8.4.12
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip


#6-PHP环境检查没有问题后可以进行编译和编译测试
cd /data/php-8.4.12/
make
make test

#7-编译完成后进行编译安装
make install

#8-编译安装完成后需要将PHP源码目录下的2个文件进行复制操作
#8.1-将php源码【/data/php-8.4.12/】路径下的【php.ini-production】文件复制一份到PHP安装目录【/usr/local/php/】下的【lib】目录中并修改名称为php.ini
cp php.ini-production /usr/local/php/lib/php.ini
#8.2-将php源码【/data/php-8.4.12/】路径下的【sapi/fpm/php-fpm.service】文件复制一份到【/usr/lib/systemd/system】中用来启动php-fpm才能解析PHP程序
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system

《1》注意:在执行【./configure】进行环境检查的到最后时报错

configure: error: Package requirements (oniguruma) were not met:

Package 'oniguruma', required by 'virtual:world', not found

”也就是说我们当前的环境缺少这个【oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm】包,我们手动安装一下这个包后再执行【./configure】进行环境检查看是否解决。

#解决检查环境配置报错【configure: error: Package requirements (oniguruma) were not met:】问题,先下载和安装缺失的【oniguruma】包在手动安装后再次执行【./configure 及其后面添加的配置内容命令】检查环境
 wget https://repo.almalinux.org/almalinux/9/CRB/x86_64/os/Packages/oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm
 yum install oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm -y

《2》注意:在执行【./configure】进行环境检查的到最后时报错

configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

Package 'libzip', required by 'virtual:world', not found
Package 'libzip', required by 'virtual:world', not found
Package 'libzip', required by 'virtual:world', not found

也就是说我们当前的环境缺少这个【libzip】包,我们手动安装一下这个包后再执行【./configure】进行环境检查看是否解决

#解决方法一:编译安装libzip-1.3.2.tar.gz的源码

#1-解决检查环境配置报错【configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:】问题,先下载和安装缺失的【libzip】包在手动安装后再次执行【./configure 及其后面添加的配置内容命令】检查环境
cd /data/php-8.4.12/
yum remove libzip libzip-deve -y
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"

#2检查libzip是否编译成功(执行如下两个命令后都分别显示内容则表示成功)
pkg-config --libs libzip
pkg-config --list-all|grep libzip

#3-进入php的源码路径再次执行环境检查
cd /data/php-8.4.12
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip

#解决方法二:编译安装libzip-1.11.3.tar.gz源码

#1-解决检查环境配置报错【configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:】问题,先下载和安装缺失的【libzip】包在手动安装后再次执行【./configure 及其后面添加的配置内容命令】检查环境
cd /data/php-8.4.12/
yum remove libzip libzip-deve -y
wget https://libzip.org/download/libzip-1.11.3.tar.xz
tar -xvf libzip-1.11.3.tar.xz
cd libzip-1.11.3/
mkdir build
cd build
yum install cmake -y
cmake ..
make &&make install

#2检查libzip是否编译成功(执行如下两个命令后都分别显示内容则表示成功)
pkg-config --libs libzip
pkg-config --list-all|grep libzip

#3-进入php的源码路径再次执行环境检查
cd /data/php-8.4.12
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip

PHP的编译环境检查没有问题后就进行如下的编译和编译安装,如下图所示:

注意,在使用【make】编译PHP源码到最后报错

/usr/bin/ld: ext/zip/zip_stream.o: in function `php_stream_zip_opener':
/data/php-8.4.12/ext/zip/zip_stream.c:345: undefined reference to `zip_file_is_seekable'
/usr/bin/ld: ext/zip/zip_stream.o: in function `php_stream_zip_open':
/data/php-8.4.12/ext/zip/zip_stream.c:259: undefined reference to `zip_file_is_seekable'

collect2: error: ld returned 1 exit status

make: *** [Makefile:282:sapi/cli/php] 错误 1”这是由于当前环境缺失了【libzip】需要重新安装,解决方法如下:

#解决执行【make】编译PHP到最后报错“/data/php-8.4.12/ext/zip/zip_stream.c:259: undefined reference to `zip_file_is_seekable'  collect2: error: ld returned 1 exit status make: *** [Makefile:282:sapi/cli/php] 错误 1”解决方法

#1-重新安装PHP的所有需要的依赖库
yum  install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel  libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel sqlite-devel libzip -y

#2-清空已有编译内容
make clean

#3-重新编译
make

PHP源码正常编译完成的效果如下图所示:

三、测试安装部署好的PHP是否正常

#测试安装部署好的PHP是否正常

#1-进入php的安装目录
cd /usr/local/php

#2-进入php安装目录下的bin目录查看需要编译的模块是否都存在(否则就是有问题的需要重新编译)
cd bin
./php -m

PHP中./configure的--with-pdo-mysql=mysqlnd选项介绍
序号 说明
1

--with-pdo-mysql=mysqlnd

表示使用mysqlnd驱动,这里选项涉及两个概念,一个是pdo,另一个是mysqlnd。

《1》PDO是PHP Data Objects的缩写,它是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得PHP应用不用去关心具体要连接的数据库类型,也就是说,如果使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Oracle到MySQL,仅仅需要修改很少的PHP代码。它的功能类似于JDBC、ODBC、DBI之类接口。因此,这里的"--with-pdo-mysql"就是PHP与MySQL进行连接的方式。

《2》mysqlnd是mysql native driver的简写,它是由PHP官方提供的mysql驱动连接代码,它出现的目的是代替旧的libmysql驱动,而libmysql是mysql官方自带的mysql与php连接的驱动,从PHP5.3开始已经不推荐使用libmysql驱动,而建议使用mysqlnd,而在PHP7版本中,libmysql驱动已经被移除。

因此,在PHP7中,“--with-mysql=mysqlnd”的写法已经被废除。另外,由于mysqlnd内置于PHP源代码,因此在编译安装php时就不需要预先安装好mysql, 这将减化不少安装工作量。

2

--with-mysqli=mysqlnd 

mysqli叫做 “MySQL增强扩展”。也是PHP连接mysql数据库的一种方式,这里也使用mysqlnd驱动进行连接。


网站公告

今日签到

点亮在社区的每一天
去签到