昨天搭建个FileRun(个人网盘)实验,做个Lychee(图床)实验。这两个都要用到LAMP/LNMP实验,当我做到安装和配置PHP时,我脑子里就突然来有个自灵魂的拷问:这个PHP到底有什么用呢?为啥搭建个xxx系统都需要用到PHP?Apache可以和Nginx我们可以任意选一个,Mysql可以和MariaDB我们也可以任意选一个,唯独PHP永远都是PHP,LAMP/LNMP(除了Linux系统)就PHP没有换过。
在以往无论是搭建WordPress还是OwnCloud我就只会使用,比如:需要php的时候我就安装个php。需要个Nginx我就安装个Nginx…
但是当需要匹配php时,就会蒙圈。
直到昨天网上查下,其中奥秘令我茅塞顿开。
参考友军文档:
https://blog.csdn.net/ziyifengfei/article/details/80078657
目前来说,网站页面主要分为静态页面和动态页面,纯静态页面组成的网站现在相对比较少见,大型网站一般使用的是动态网站建站技术,还有一部分网站是静态网页与动态网页共存。
本文以Apache服务器、php语言为例,详解动态网站的访问过程,下面直接切入本文主题。
第一个知识点:用户端访问服务器端的html文件
(1)通过本机配置好的DNS域名服务器地址寻找DNS服务器,将网站URL中的Web主机域名解析为Web服务器所在的Linux操作系统(Apache通常与Linux操作系统组合使用)中对应的IP地址。
(2)通过HTTP协议(超文本传输协议)去连接上述IP地址的服务器系统,通过默认80端口(默认的端口是80,也有其他端口,输入URL时一般不用输入端口)请求Apache服务器上相应目录下的html文件(如index.htm)。
(3)Apache服务器收到用户的访问请求后,在它管理的文档目录中找到并打开相应的html文件(如index.htm),将文件内容响应给客户端浏览器(即用户)。
(4)浏览器收到Web服务器的响应后,接收并下载服务器端的html静态代码,然后浏览器解读代码,最终将网页呈现出来(由于不同的浏览器对于代码的解读规则会不一样,所以不同浏览器对于相同的网页呈现的最终页面效果会有所差异)。
第二个知识点:用户端访问服务器端的php文件
(1)该步与上面访问html静态网页是一样的,通过DNS服务器解析出相应的Web服务器的IP地址。
(2)与上面访问html静态页面相似,不过最后请求的是Apache服务器上相应目录下的php文件,如index.php。
(3)Apache服务器本身不能处理php动态语言脚本文件,就寻找并委托PHP应用服务器来处理(服务器端事先得安装PHP应用服务器),Apache服务器将用户请求访问的php文件(如index.php)文件交给PHP应用服务器。
(4)PHP应用服务器接收php文件(如index.php),打开并解释php文件,最终翻译成html静态代码,再将html静态代码交还给Apache服务器,Apache服务器将接收到的html静态代码输出到客户端浏览器(即用户)。
(5)与上面访问html静态页面相同,浏览器收到Web服务器的响应后,接收并下载服务器端的html静态代码,然后浏览器解
读代码,最终将网页呈现出来。
第三个知识点:用户端访问服务器端的MySQL数据库
如果用户需要对MySQL数据库中的数据进行操作,那么就需要在服务器端安装数据库管理软件MySQL服务器,用来存储和管理网站数据。由于Apache服务器是无法连接和操作MySQL服务器,所以还需要安装php应用服务器,这样Apache服务器就委托php应用服务器去连接和操作数据库,在对数据库中的数据进行管理的时候,一般都需要用到结构化查询语句,即SQL语句。
(1)该步与上面访问php文件一样,通过DNS服务器解析出相应的Web服务器的IP地址。
(2)与上面访问php文件一样,请求访问Apache服务器上相应目录下的php文件。
(3)与上面访问php文件一样,PHP应用服务器接收Apache服务器的委托,收到相应的php文件。
(4)PHP应用服务器打开php文件,在php文件中通过对数据库连接的代码来连接本机或者网络上其他机器上的MySQL数据库,并在php程序中通过执行标准的SQL查询语句来获取数据库中的数据,再通过PHP应用服务器将数据生成html静态代码。
(5)浏览器收到Web服务器的响应后,接收并下载服务器端的html静态代码,然后浏览器解读代码,最终将网页呈现出来。
需要注意的是,文中(2)与(3)的区别是,一个访问了数据库,另一个没有访问数据库,所以在过程中有点差别。
总结:大的方面PHP有两种功能:
1、帮助Apache解析以.php结尾的文件(动态文件)
2、充当Apache和Mysql/MariaDB之间的桥梁,Apache想要和数据库通信,必须通过php。
1、更新php的Yum仓库
yum install -y epel-release yum-utils
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
2、启用PHP 7.4 Remi 存储库:
yum-config-manager --enable remi-php74
3、安装PHP 7.4:
yum install -y php-fpm php
4、查看增加了多少php仓库
[root@node3 yum.repos.d]# ll /etc/yum.repos.d/
-rw-r--r-- 1 root root 446 Feb 15 05:37 remi-glpi91.repo
-rw-r--r-- 1 root root 446 Feb 15 05:37 remi-glpi92.repo
-rw-r--r-- 1 root root 446 Feb 15 05:37 remi-glpi93.repo
-rw-r--r-- 1 root root 446 Feb 15 05:37 remi-glpi94.repo
-rw-r--r-- 1 root root 855 Feb 15 05:37 remi-modular.repo
-rw-r--r-- 1 root root 456 Feb 15 05:37 remi-php54.repo
-rw-r--r-- 1 root root 1314 Feb 15 05:37 remi-php70.repo
-rw-r--r-- 1 root root 1314 Feb 15 05:37 remi-php71.repo
-rw-r--r-- 1 root root 1314 Feb 15 05:37 remi-php72.repo
-rw-r--r-- 1 root root 1314 Feb 15 05:37 remi-php73.repo
-rw-r--r-- 1 root root 1314 Mar 31 06:39 remi-php74.repo
-rw-r--r-- 1 root root 1314 Feb 15 05:37 remi-php80.repo
-rw-r--r-- 1 root root 1314 Mar 31 06:39 remi-php81.repo
-rw-r--r-- 1 root root 2605 Feb 15 05:37 remi.repo
-rw-r--r-- 1 root root 750 Feb 15 05:37 remi-safe.repo
可以看到有php70,71,72,73,74,80,81版本
上面要是的是使用php74版本
如果想要使用其它的php版本如何操作呢?
(1)先开启对应的yum仓库
#先查看对用的仓库开启没有:disabled表示没有开启,enabled表示开启了
yum repolist all | grep php
...
remi-php71 Remi's PHP 7.1 RPM reposito disabled
remi-php71-debuginfo/x86_64 Remi's PHP 7.1 RPM reposito disabled
remi-php71-test Remi's PHP 7.1 test RPM rep disabled
remi-php71-test-debuginfo/x86_64 Remi's PHP 7.1 test RPM rep disabled
remi-php72 Remi's PHP 7.2 RPM reposito disabled
remi-php72-debuginfo/x86_64 Remi's PHP 7.2 RPM reposito disabled
remi-php72-test Remi's PHP 7.2 test RPM rep disabled
remi-php72-test-debuginfo/x86_64 Remi's PHP 7.2 test RPM rep disabled
remi-php73 Remi's PHP 7.3 RPM reposito disabled
remi-php73-debuginfo/x86_64 Remi's PHP 7.3 RPM reposito disabled
remi-php73-test Remi's PHP 7.3 test RPM rep disabled
remi-php73-test-debuginfo/x86_64 Remi's PHP 7.3 test RPM rep disabled
remi-php74 Remi's PHP 7.4 RPM reposito enabled: 436
remi-php74-debuginfo/x86_64 Remi's PHP 7.4 RPM reposito disabled
remi-php74-test Remi's PHP 7.4 test RPM rep disabled
remi-php74-test-debuginfo/x86_64 Remi's PHP 7.4 test RPM rep disabled
remi-php80 Remi's PHP 8.0 RPM reposito disabled
remi-php80-debuginfo/x86_64 Remi's PHP 8.0 RPM reposito disabled
remi-php80-test Remi's PHP 8.0 test RPM rep disabled
remi-php80-test-debuginfo/x86_64 Remi's PHP 8.0 test RPM rep disabled
remi-php81 Remi's PHP 8.1 RPM reposito enabled: 294
remi-php81-debuginfo/x86_64 Remi's PHP 8.1 RPM reposito disabled
remi-php81-test Remi's PHP 8.1 test RPM rep disabled
remi-php81-test-debuginfo/x86_64 Remi's PHP 8.1 test RPM rep disabled
...
然后开启仓库
yum-config-manager --enable remi-php81 #最后填写要开启仓库的名称,就通过上述命令查看
(2)安装相应的程序或组件
如果不知道安装的程序或组件可以,查看:
yum search php81 #查看找相应的组件,然后安装
php81-php-pecl-http-message-devel.x86_64 : php81-php-pecl-http-message developer files (headers)
php81-php-pecl-pcsc-devel.x86_64 : php81-php-pecl-pcsc developer files (header)
php81-php-pecl-psr-devel.x86_64 : php81-php-pecl-psr developer files (header)
php81-php-pecl-raphf-devel.x86_64 : php81-php-pecl-raphf developer files (header)
php81-php-pecl-xmldiff-devel.x86_64 : php81-php-pecl-xmldiff developer files (header)
php81-php-pecl-yaconf-devel.x86_64 : php81-php-pecl-yaconf developer files (header)
php81-php-zephir-parser-devel.x86_64 : php81-php-zephir-parser developer files (headers)
php81-php-zstd-devel.x86_64 : php81-php-zstd developer files (header)
php81-runtime.x86_64 : Package that handles php81 Software Collection.
php81-scldevel.x86_64 : Package shipping development files for php81
php81-syspaths.x86_64 : System-wide wrappers for the php81 package
php81.x86_64 : Package that installs PHP 8.1
php81-build.x86_64 : Package shipping basic build configuration
php81-php.x86_64 : PHP scripting language for creating dynamic web sites
php81-php-ast.x86_64 : Abstract Syntax Tree
php81-php-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php81-php-brotli.x86_64 : Brotli Extension for PHP
php81-php-cli.x86_64 : Command-line interface for PHP
php81-php-common.x86_64 : Common files for PHP
php81-php-dba.x86_64 : A database abstraction layer module for PHP applications
php81-php-dbg.x86_64 : The interactive PHP debugger
php81-php-devel.x86_64 : Files needed for building PHP extensions
php81-php-embedded.x86_64 : PHP library for embedding in applications
php81-php-enchant.x86_64 : Enchant spelling extension for PHP applications
php81-php-ffi.x86_64 : Foreign Function Interface
php81-php-fpm.x86_64 : PHP FastCGI Process Manager
php81-php-gd.x86_64 : A module for PHP applications for using the gd graphics library
php81-php-geos.x86_64 : PHP module for GEOS
php81-php-gmp.x86_64 : A module for PHP applications for using the GNU MP library
php81-php-horde-horde-lz4.x86_64 : Horde LZ4 Compression Extension
php81-php-imap.x86_64 : A module for PHP applications that use IMAP
php81-php-intl.x86_64 : Internationalization extension for PHP applications
php81-php-ldap.x86_64 : A module for PHP applications that use LDAP
php81-php-libvirt.x86_64 : PHP language binding for Libvirt
php81-php-libvirt-doc.noarch : Document of php-libvirt
php81-php-litespeed.x86_64 : LiteSpeed Web Server PHP support
php81-php-lz4.x86_64 : LZ4 Extension for PHP
php81-php-maxminddb.x86_64 : MaxMind DB Reader extension
php81-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php81-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php81-php-oci8.x86_64 : A module for PHP applications that use OCI8 databases
php81-php-odbc.x86_64 : A module for PHP applications that use ODBC databases
php81-php-opcache.x86_64 : The Zend OPcache
php81-php-pdo.x86_64 : A database access abstraction module for PHP applications
php81-php-pdo-dblib.x86_64 : PDO dr
如果安装的是php81,那么启动命令:
systemctl restart php81-php-fpm