在正式学习 PHP 语言之前,还需要对 Apache、PHP 和 MySQL 做一些比较深入的说明,这样有助于理解和学习后续内容。本节主要以 Windows 平台下的配置做讲解,Linux/UNIX 平台下的情形与之类似。
Apache(全称:Apache HTTP Server)是 Apache 软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。
Apache 安装完成后,有一些目录需要我们进一步了解,比如 conf、htdocs、logs 和 modules 这几个目录。
Apache 服务器的很多功能和任务等重要配置,都是通过修改 httpd.conf 来完成的,如设置服务器根目录、服务器超时时间、监听端口、Apache 运行模块的载入等。下面这段内容就是从 httpd.conf 截取的一部分。
httpd.conf 中,凡是以#号开头的内容都表示注释,也就是说,这些行的内容只是对配置项的一些说明,或者禁用该配置项,被注释的部分 Apache 启动时并不会加载它们。
这里着重介绍几个重要的 Apache 配置项。
这个配置项用来绑定 Apache 监听的 IP 地址或端口号。一般情况下,此配置项默认为 80,即 Apache 监听 80 端口,这也是 HTTP 协议所使用的端口。如果电脑上有其他程序占用了这个端口,比如 IIS(它的默认端口也是 80),则可以将 Apache 的监听端口改为 8080 或者其它没有被占用的端口。
在 httpd.conf 中有很多 LoadModule 项,每一个都是用来载入一个模块。例如载入名为 access_compat_module 模块,其路径为 modules/mod_access_compat.so,载入命令如下:
并不是所有模块都要从 modules 目录下载入,比如要将 PHP 作为一个 Apache 的模块运行,就需要载入有关 PHP 的模块,在 httpd.conf 中加入如下所示的配置,表示从 PHP 的安装目录载入由 Apache 执行的 PHP 模块 php7apache2_4.dll。
如果不需要使用某个模块,或者说关闭某个模块,只需将这个模块的载入配置使用#注释掉就可以了。
这个配置项用来设置服务器的根目录,默认设置为 Apache 安装目录下的 htdocs 目录。我们可以修改这个配置项的值,进而修改服务器根目录。比如将根目录设置为 D 盘下的 webroot 目录,可以先注释掉默认配置,然后添加新的配置,如下所示。
这样,对于所有 HTTP 请求,Apache 服务器就会去 D 盘的 webroot 目录下寻找可执行的文件了。
这里介绍的 PHP 是指 PHP 的解释器,它是一种服务端语言解释软件。由 Apache 加载以后,可以使 Apache 拥有解析 php 文件的功能,使得这台服务器可以运行 php 程序。
与 Apache 相似,PHP 也有自己的核心配置文件 php.ini,PHP 解析器启动时会读取这个文件。与 httpd.conf 不同,php.ini 以英文分号;作为注释符的。这些配置项均在 php.ini 中设置。
PHP 基本的配置项如下所述:
注意:httpd.conf 配置项与其值之间用空格分隔,而 php.ini 则是使用=。
关于文件上传功能的配置,主要有以下两项。
在 php.ini 中,有关 session 的基本配置有以下 3 项。
这里的安全设置主要是指 PHP 安全模式方面的内容,基本的配置有以下几项。
MySQL 是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言(结构化查询语言(SQL))进行数据库管理。
MySQL 会把所有数据以文件的形式存储在 MySQL 安装目录的 data 目录下。开发人员可以通过 MySQL 创建许多数据库,每创建一个数据库,就会在 data 目录下生成一个子目录。这个子目录的名字就是数据库的名字,在这些子目录下存放的就是真正的数据文件。
PHP 和 MySQL 之间只是调用和被调用的关系,不需要什么额外的配置,PHP 通过 SQL 语句来操作 MySQL 完成一系列的数据操作,在此期间 MySQL 数据库一直是被动的接受并执行操作指令。
PHP 与 MySQL 交互使用的语言规则是 SQL,但是 PHP 和 MySQL 是两个独立的应用程序,想要交互必须得先建立连接,就如同浏览器访问 Web 服务器一样,在请求数据发送之前也需要先成功建立 tcp 连接。
PHP 脚本与 MySQL 建立连接的过程都是由 PHP 的 MySQLi 或者 PDO 等驱动来完成的,这些驱动的本质都是 PHP 的模块,即 PHP 解释器可以识别的相关函数集合,一般使用C语言编写,对 PHP 来说,屏蔽了具体连接建立和数据库协议操作的详细过程,只对外暴露了一些基础的接口,即 PHP 可以调用到的一些数据库操作函数,如连接数据库、执行数据库 SQL 命令、断开连接等等。
总而言之,PHP 调用 MySQL 数据库的过程,通常是通过 PHP 的数据库驱动模块来操作的,它的本质也是一个网络数据的请求操作,遵循 MySQL 通信协议来建立连接,使用 SQL 语法来执行具体操作指令。