1.2 PHP开发环境搭建
在使用PHP语言开发程序之前,首先要在系统中搭建开发环境。在通常情况下,开发人员使用的都是Windows平台,在Windows平台上搭建PHP环境需要安装Apache服务器和PHP软件。安装方式有集成安装和自定义安装两种,采用集成安装的方式非常简单,但不利于学习,所以本节将以自定义安装为例,讲解如何搭建PHP开发环境。
1.2.1 Apache的安装
Apache HTTP Server(简称Apache)是Apache软件基金会发布的一款Web服务器软件,由于其开源、跨平台和安全性的特点被广泛应用。目前Apache有2.2和2.4两个版本,本书以Apache 2.4版本为例,讲解Apache软件的安装步骤。
1.获取Apache
在Apache官方网站(https://httpd.apache.org)上提供了软件源代码的下载,但是没有提供编译后的软件下载。可以从Apache公布的其他网站中获取编译后的软件。以Apache Lounge网站为例,该网站提供了VC11、VC14等版本的软件下载,如图1-2所示。
图1-2 从Apache Lounge获取软件
在网站中找到“httpd-2.4.25-win32-VC14.zip”版本进行下载即可。由于版本仍然在更新,通常读者选择2.4.x的更新版本并不会影响到学习。VC14是指该软件使用Microsoft Visual C++2015运行库进行编译,在安装Apache前需要先在Windows系统中安装此运行库。目前最新版本的Apache已经不支持XP系统,XP用户可以选择VC9编译的旧版本Apache使用。
2.解压文件
首先创建“C:\web\apache2.4”作为Apache的安装目录,然后打开“httpd-2.4.25-win32-VC14.zip”压缩包,将里面的“Apache24”目录中的文件解压到安装目录下,如图1-3所示。
在图1-3中,conf和htdocs是需要重点关注的两个目录,当Apache服务器启动后,通过浏览器访问本机时,就会看到htdocs目录中的网页文档。conf目录是Apache服务器的配置目录,保存了主配置文件httpd.conf和extra目录下的若干个辅配置文件。默认情况下,辅配置文件是不开启的。
3.配置Apache
图1-3 Apache安装目录
(1)配置安装路径
将Apache解压后,需要配置安装路径才可以使用。使用Notepad++编辑器打开Apache的配置文件“htdocs\httpd.conf”,执行文本替换,将原来的“c:/Apache24”全部替换为“c:/web/apache2.4”,如图1-4所示。
(2)配置服务器域名
在安装步骤中,服务器域名的配置并不是必须的,但若没有配置域名,在安装Apache服务时会出现提醒。下面介绍如何进行服务器域名的配置。
图1-4 修改配置文件
搜索“ServerName”,找到下面一行配置。
上述代码开头的“#”表示该行是注释文本,应删去“#”使其生效,如下所示。
上述配置中,“www.example.com”是一个示例域名,若不需要指定域名,也可以更改为本机地址,如“127.0.0.1”或“localhost”。
4.安装Apache
Apache的安装是指将Apache安装为Windows系统的服务项,可以通过Apache的服务程序“bin\httpd.exe”来进行安装,具体步骤如下。
执行【开始】菜单→【所有程序】→【附件】,找到【命令提示符】并单击鼠标右键,在弹出的快捷菜单中选择【以管理员身份运行】方式,启动命令行窗口。
在命令模式中切换到Apache安装目录下的bin目录。
输入以下命令开始安装。
上述步骤执行后,安装成功的效果如图1-5所示。
图1-5 通过命令行安装Apache服务
从图1-5可以看出,Apache安装的服务名称为“Apache2.4”,该名称在系统服务中不能重复,否则会安装失败。另外,如需卸载Apache服务,可以使用“httpd.exe-k uninstall”命令进行卸载。
5.启动Apache服务
Apache服务安装后,就可以作为Windows的服务项进行启动或关闭了。有两种方式可以管理Apache服务,接下来依次进行介绍。
(1)通过命令行启动Apache服务
在以管理员身份运行的命令行中,执行如下命令可进行管理。
Apache服务启动成功后,效果如图1-6所示。
(2)通过Apache Service Monitor启动Apache服务
Apache提供了服务监视工具“Apache Service Monitor”用于管理Apache服务,程序位于“bin\ApacheMonitor.exe”。打开程序后,在Windows系统任务栏右下角会出现Apache的小图标管理工具,在图标上单击鼠标左键可以弹出控制菜单,如图1-7所示。
图1-6 命令方式启动Apache服务
图1-7 启动Apache服务
在图1-7所示的菜单中,单击【Start】即可启动Apache服务,当小图标由红色变为绿色时,表示启动成功。
6.访问测试
通过浏览器访问本机站点“http://localhost”,如果看到图1-8所示的画面,说明Apache正常运行。
图1-8所示的“It works !”是Apache默认站点下的首页,即“htdocs\index.html”这个网页的显示结果。大家也可以将其他网页放到“htdocs”目录下,然后通过“http://localhost/网页文件名”进行访问。
图1-8 在浏览器中访问localhost
脚下留心
在安装完Apache后,可能会出现服务启动不了的情况,这时需要查看一下端口号的占用情况。Apache默认监听80端口,如果该端口被其他程序占用,则Apache无法启动。
在命令行中通过netstat-ano命令可以查看端口号占用情况,如图1-9所示。
从图1-9中可以看出,PID为1968的进程正在监听本地地址的80端口,为了获知该进程是哪一个程序,执行tasklist | findstr "1968"命令,如图1-10所示。
图1-9 查看端口占用情况
图1-10 查看进程ID对应的程序名称
可以看到当前是httpd.exe占用了80端口,说明Apache服务正在工作。如果是其他程序占用了80端口,在任务管理器中找到这个程序,将其停止即可。
多学一招:安装多个Apache服务
Apache支持安装多个服务同时工作,确保每个服务名称和监听端口不冲突即可。以前面安装的环境为例,重新解压Apache文件到“C:\Apache24”目录中,然后查找“Listen 80”修改监听的端口号,如改为8080端口。修改完成后,通过如下命令安装并启动新的Apache服务。
上述命令中,“-n Apache2”表示安装的服务名为“Apache2”,通过更改服务名可以避免和已经安装的“Apache2.4”冲突。在测试时,通过浏览器分别访问“http://localhost”和“http://localhost:8080”,如果都能打开,说明同一环境下配置多个Apache成功。
另外,如需卸载“Apache2”服务,可以使用“httpd.exe-k uninstall-n Apache2”命令。
1.2.2 PHP的安装
安装Apache之后,开始安装PHP模块,它是开发和运行PHP脚本的核心。在Windows系统中,PHP有两种安装方式:一种方式是使用CGI应用程序,另一种方式是作为Apache模块使用。其中,第二种方式较为常见。接下来,讲解PHP作为Apache模块的安装方式。
1.获取PHP
PHP的官方网站(http://php.net)提供了PHP最新版本的下载,如图1-11所示。
从图1-11中可以看出,PHP目前正在发布5.6、7.0、7.1三种版本。本书选择当前最新的7.1版本进行讲解,并将版本5.4到7.1之间的一些语法差异进行补充说明,以确保代码的兼容性。
在下载页面,PHP提供了Thread Safe(线程安全)和Non Thread Safe(非线程安全)两种选择,在与Apache搭配时,应选择“Thread Safe”版本。
图1-11 PHP官方网站
2.解压文件
将从PHP网站下载到的“php-7.1.4-Win32-VC14-x86.zip”压缩包解压,保存到“C:\web\php7.1”目录中,如图1-12所示。
图1-12 PHP安装目录
图1-12所示是PHP的目录结构,其中“ext”是PHP扩展文件所在的目录,“php.exe”是PHP的命令行应用程序,“php7apache2_4.dll”是用于Apache的DLL动态链接模块。“php.ini-development”是PHP预设的配置模板,适用于开发环境。“php.ini-production”也是配置模板,适合网站上线时使用。
3.创建php.ini配置文件
PHP提供了开发环境和上线环境的配置模板,在PHP的学习阶段,推荐选择开发环境的配置模板。在PHP安装目录下复制一份“php.ini-development”文件,并命名为“php.ini”,将该文件作为PHP的配置文件。
4.在Apache中引入PHP模块
打开Apache配置文件“C:\web\apache2.4\conf\httpd.conf”,引入PHP为Apache提供的DLL模块,具体代码如下所示。
上述配置中,第1行表示将PHP作为Apache的模块来加载,其中,LoadModule是加载模块的指令,模块名为php7_module,模块文件路径指向了PHP目录下的php7apache2_4.dll文件;第2~4行用于添加对PHP文件的解析,利用正则表达式匹配“.php”扩展名的文件,然后通过setHandler提交给PHP处理;第5行的PHPIniDir用于指定“php.ini”文件的保存目录。
配置代码添加后如图1-13所示。
图1-13 在Apache中引入PHP模块
接下来配置Apache的索引页。索引页是指当访问一个目录时,自动打开哪个文件作为索引。例如,访问“http://localhost”实际上访问到的是“http://localhost/index.html”,这是因为“index.html”是默认索引页,所以可以省略索引页的文件名。
在配置文件中搜索“DirectoryIndex”,找到以下代码。
上述代码第2行的“index.html”即默认索引页,下面将“index.php”也添加为默认索引页。
上述配置表示在访问目录时,首先检测是否存在“index.html”,如果有,则显示,否则就继续检查是否存在“index.php”。如果一个目录下不存在索引页文件,Apache会自动显示该目录下所有的文件和子文件夹(也可关闭此功能)。
5.重新启动Apache服务
修改Apache配置文件后,需要重新启动Apache服务,才能使配置生效。通过命令行方式或Apache Service Monitor重启服务即可。
以上步骤已经将PHP作为Apache的一个扩展模块,并随Apache服务器一起启动。如果想检查PHP是否安装成功,可以在Apache的Web站点目录“htdocs”下,使用Notepad++创建一个名为“test.php”的文件,并在文件中写入下面的内容。
上述代码用于将PHP的配置信息输出到网页中。将代码编写完成后保存文件,如图1-14所示。
图1-14 保存test.php
然后使用浏览器访问地址“http://localhost/test.php”,如果看到图1-15所示的PHP配置信息,说明上述配置成功。否则,需要检查上述配置操作是否有误。
图1-15 显示PHP配置信息
多学一招:使用PHP内置的Web服务器
PHP从5.4版本开始内置了一个简单的Web服务器,主要用于方便本地测试,但在功能和效率上不如Apache等成熟的Web服务器。
若要开启PHP内置服务器,可以使用如下命令。
上述命令中,“localhost:8081”用于指定网络地址和监听端口,“C:\web\apache2.4\htdocs”用于指定网站的根目录,此处读者也可以设置成其他的端口号或网站目录。上述命令执行后,Web服务器就已经启动了,直到按〈Ctrl+C〉组合键停止程序。
通过浏览器访问“http://localhost:8081/test.php”可以进行测试。在test.php显示的phpinfo表格中,Server API在搭配Apache环境时显示为“Apache 2.0 Handler”,使用内置服务器时显示为“Built-in HTTP server”,由此可以区分当前使用的环境。
1.2.3 Web服务器配置
在前面已经详细讲解了Apache和PHP的安装方法,除了安装步骤本身之外,服务器的配置也是十分重要的。本节将对Web服务器的一些常见配置进行讲解。
1.Apache目录结构
在配置Apache之前,先了解一下Apache的目录结构。各目录的作用及说明如表1-2所示。
表1-2 Apache目录说明说明
2.Apache配置文件
Apache配置文件中的指令非常多,在Apache官方网站提供的在线手册中有详细的介绍。下面通过表1-3列举一些常用的配置指令。
表1-3 Apache的常用配置说明
对于上述配置,读者可根据实际需要进行修改,但要注意,每次修改配置需要重启Apache服务才会生效,如果修改错误,会造成Apache无法启动。若需要恢复默认配置,可以在“conf\original”目录中获取Apache提供的配置文件备份。
3.配置虚拟主机
虚拟主机是Apache提供的一个功能,通过虚拟主机可以在一台服务器上部署多个网站。通常一台服务器的IP地址是固定的,而不同的域名可以解析到同一个IP地址上。因此,当用户通过不同的域名访问同一台服务器时,虚拟主机功能就可以让用户访问到不同的网站。Apache虚拟主机的具体配置步骤如下。
(1)配置域名
由于申请真实域名比较麻烦,为了便于学习和测试,可以更改系统hosts文件,实现将任意域名解析到指定IP。在操作系统中,hosts文件用于配置域名与IP之间的解析关系,当请求域名在hosts文件中存在解析记录时,直接使用该记录;不存在时,再通过DNS域名解析服务器进行解析。
在Windows系统中以管理员身份运行Notepad++,然后执行【文件】→【打开】命令,打开“C:\Windows\System32\drivers\etc”目录下的hosts文件,配置域名和IP地址的映射关系,具体如下。
经过上述配置后,就可以在浏览器上通过域名来访问本机的Web服务器,这种方式只对本机有效。在配置虚拟主机前,通过任何域名访问到的都是Apache的默认主机。
(2)启用辅配置文件
辅配置文件是Apache配置文件httpd.conf的扩展文件,用于将一部分配置抽取出来,便于修改,但默认并没有启动。打开httpd.conf文件,找到如下所示的一行配置,取消“#”注释即可启用。
(3)配置虚拟主机
打开“conf/extra/httpd-vhosts.conf”虚拟主机配置文件,可以看到Apache提供的默认配置,具体如下。
上述配置中,第1行的“*.80”表示该主机通过80端口访问;ServerAdmin是管理员邮箱地址;DocumentRoot是该虚拟主机的文档目录;ServerName是虚拟主机的域名;ServerAlias用于配置多个域名别名(用空格分隔),支持形如“*.example.com”的泛解析二级域名;ErrorLog是错误日志;CustomLog是访问日志,其后的common表示日志格式为通用格式。
接下来,为Apache提供的默认配置添加“#”注释,以此为参考对象,重新编写如下配置。
上述配置实现了两个虚拟主机,分别是localhost和www.php.test,并且这两个虚拟主机的站点目录指定在了不同的路径下。同时利用ServerAlias针对域名为www.php.test的网站起了一个别名,即不论用户访问的是www.php.test还是php.test,访问的都是同一个网站。
接下来创建“C:\web\apache2.4\htdocs\test”目录,并在目录中放一个简单的网页,然后重启Apache服务。为了验证配置是否生效,通过浏览器访问测试,效果如图1-16所示。
图1-16 访问虚拟主机
4.访问权限控制
Apache可以控制服务器中的哪些路径允许被外部访问,在httpd.conf中,默认站点目录htdocs已经配置为允许外部访问,但如果要将其他目录也设置为允许访问时,需要手动进行配置。接下来将通过虚拟主机www.admin.com来介绍如何进行访问权限控制。
编辑httpd-vhost.conf,在配置虚拟主机的同时,配置站点目录的访问权限,具体如下。
上述配置将虚拟主机的站点目录指定到“c:/web/www.admin.com”目录下,并通过<Directory>指令为其配置了目录访问权限。其中,“Require local”表示只允许本地访问,若允许所有访问可设为“Require all granted”,若拒绝所有访问可设为“Require all denied”。
在浏览器中进行测试。当用户没有访问权限时,效果如图1-17所示;当用户有权限访问并且该目录下存在index.html时,效果如图1-18所示。
5.分布式配置文件
分布式配置文件是为目录单独进行配置的文件,可以实现在不重启服务器的前提下更改某个目录的配置。接下来,编辑httpd-vhosts.conf文件,在www.admin.com目录配置中开启分布式配置文件。
图1-17 没有访问权限
图1-18 访问成功
当上述配置添加AllowOverride All之后,Apache就会到站点下的各个目录中读取名称为“.htaccess”的分布式配置文件,该文件中的配置将会覆盖原有的目录配置。在分布式配置文件中可以直接编写<Directory>中的大部分配置,如Options、ErrorDocument指令。
Apache分布式配置文件虽然方便了网站管理员对目录的管理,但是会影响服务器的运行效率。因此,需要将其关闭时,改为AllowOverride None即可。
6.目录浏览功能
当开启Apache目录浏览功能时,如果访问的目录中没有默认索引页(如index.html),就会显示目录中的文件列表。下面在目录“C:\web\www.admin.com”中创建“.htaccess”文件,编写如下配置。
上述配置中,Options指令用于配置目录选项,Indexes表示启用文件列表。当配置生效后,文件列表的显示效果如图1-19所示。
若要关闭目录浏览功能时,将其修改为“Options-Indexes”即可。
7.自定义错误页面
在Web开发中,HTTP状态码用于表示Web服务器的响应状态,由3位数字组成。常见的HTTP状态码有403(Forbidden,拒绝访问)、404(Not Found,页面未找到)、500(Internal Server Error,服务器内部错误)等。当遇到错误时,Apache会使用error目录中的模板显示一个简单的错误页面,并支持将一个URL地址或站点目录下的某个文件作为自定义错误页面。
通过ErrorDocument指令可以配置每种错误码对应的页面,示例配置如下。
在<Directory>或分布式配置文件中进行上述配置后,当遇到错误时,就会自动显示站点目录中相应的网页文件。以404错误为例,自定义错误页面(404.html)可以参考图1-20所示的效果。
8.配置PHP扩展
在PHP的安装目录中,“ext”文件夹保存的是PHP的扩展。在安装后的默认情况下,PHP扩展是全部关闭的,用户可以根据情况手动打开或关闭扩展。在php.ini中,搜索“;extension=”可以找到载入扩展的配置,其中“;”表示该行配置是注释,只有删去“;”才可以使配置生效。常用的PHP扩展如下。
图1-19 测试目录浏览功能
图1-20 自定义错误页面
上述配置指定了PHP扩展的文件名,没有指定扩展文件所在的路径。当“extension_dir”中已经指定扩展路径时,可以省略路径只填写文件名,否则需要填写完整的文件路径。因此,还需要在php.ini中搜索文本“extension_dir”,找到下面一行配置。
将这行配置取消“;”注释,并修改成PHP扩展的文件保存路径,具体如下。
当开启扩展后,通过phpinfo可以查询到这些扩展的信息,如图1-21所示。
9.PHP的常用配置
PHP的配置文件php.ini中有许多复杂的配置,主要包括PHP的核心配置及各种扩展模块的配置。下面通过表1-4介绍一些常用配置。此处读者了解即可,在后面的学习中会逐渐用到。
图1-21 查看扩展是否开启
表1-4 php.ini的常用配置
续表