下面的文章摘自《PHP和MySQL。新手到忍者》第7版,这是一本学习使用PHP和MySQL构建专业Web应用程序所需的所有工具、原理和技术的实践指南。在这个教程中,我们介绍了如何用Docker设置一个Web服务器。
在本书中,我将指导你迈出第一步,超越用HTML、CSS和JavaScript等纯客户端技术构建网页的静态世界。我们将一起探索构建网站的世界,并发现它们所带来的一系列令人眼花缭乱的动态工具、概念和可能性。无论你做什么,都不要往下看!
好吧,也许你应该往下看。毕竟,这本书的其余部分就在那里。但请记住,我们已经警告过你了!
在你建立你的第一个动态网站之前,你必须收集你的工作所需的工具。就像烘烤蛋糕一样,在你开始按照食谱制作之前,你需要先准备好材料。在本章中,我将告诉你如何下载和设置所需的软件包。
如果你习惯于用HTML、CSS,甚至是少量的JavaScript来建立网站,你可能很熟悉把构成网站的文件上传到某个地方。它可能是你支付的虚拟主机服务,由你的互联网服务提供商提供的网络空间,或者是你工作的公司的IT部门设立的网络服务器。在任何情况下,一旦你把你的文件复制到任何这些目的地,一个被称为网络服务器的软件程序就能够找到这些文件的副本,并在微软Edge、IE、谷歌Chrome、Safari或Firefox等网络浏览器要求时提供这些文件的副本。你可能听说过的常见网络服务器软件包括Apache HTTP服务器(Apache)、NGINX和互联网信息服务。
PHP是一种服务器端的脚本语言。它完全可以免费下载和使用。你可以把它看作是网络服务器的一个插件,使它能够做更多的事情,而不仅仅是发送网络浏览器所要求的文件的精确副本。安装了PHP后,你的Web服务器将能够运行一些小程序--称为PHP脚本--这些小程序能够完成一些任务,如从数据库中检索最新的信息,并在将其发送给请求的浏览器之前,用它来即时生成一个网页。本书的大部分内容都是关于编写PHP脚本来完成这些任务。
为了使你的PHP脚本能够从数据库中检索信息,首先必须有一个数据库。这就是MySQL的作用。MySQL是一个关系型数据库管理系统,或称RDBMS。我们将在后面讨论它的具体作用和工作原理,但简单地说,它是一个能够有效地组织和管理许多信息的软件程序,同时跟踪所有这些信息是如何相互关联的。MySQL还使这些信息非常容易被服务器端的脚本语言(如PHP)访问。而且,和PHP一样,它对大多数用途是完全免费的。
第一章的目标是为你建立一个配备了PHP和MySQL的Web服务器。我将提供在最近版本的Windows、macOS和Linux上运行的分步说明,所以无论你使用什么类型的计算机,你所需要的说明应该就在这里。
你自己的网络服务器
很有可能,你目前的虚拟主机的网络服务器已经安装了PHP和MySQL--这也是PHP和MySQL如此流行的原因之一。如果你的虚拟主机有这样的配备,那么好消息是,你就可以发布你的第一个网站,而不必去寻找支持正确技术的虚拟主机。
在开发静态网站时,你可以简单地将你的HTML文件直接从硬盘加载到浏览器中,看看它们是什么样子。这样做时不涉及网络服务器软件,这很好,因为网络浏览器可以自己阅读和理解HTML代码。
然而,当涉及到使用PHP和MySQL建立的动态网站时,你的网络浏览器需要一些帮助。网络浏览器无法理解PHP脚本。相反,PHP脚本包含了让精通PHP的Web服务器执行的指令,以便生成浏览器可以理解的HTML代码。
即使你有一个现有的支持 PHP 的虚拟主机,你仍然希望能够自己运行 PHP 脚本而不需要使用别人的服务器。为此,你需要建立你自己的 web 服务器。服务器 "这个词可能会让你想到一个大的、有空调的房间,里面装满了架子上的大电脑。但不要担心,你不需要任何花哨的新硬件。你的笔记本电脑或台式电脑就可以很好地工作。
要在虚拟主机上运行PHP脚本,你需要在编辑器中编写,打开FTP或SSH客户端并将其上传到服务器上。只有这样,你才能在浏览器中通过导航到你创建的文件的URI看到结果。如果你犯了一个错误,出现了一个错误,你需要修改代码,回到你的FTP程序中,再次上传文件,然后重新加载页面。这很乏味,而且占用了你可以用来写代码的宝贵时间。通过在你自己的电脑上运行一个服务器,你将能够在你的编辑器中保存一个文件,并通过简单地刷新页面在你的浏览器中查看变化 - 不需要上传文件。这是一个真正的节省时间的方法,也是在你的个人电脑上运行服务器的最大优势之一(尽管不是唯一的!)--即使你已经有一个完美的虚拟主机。
那么,你如何在你的电脑上运行一个网络服务器呢?有四种方法可以做到这一点,每种方法都有自己的优点和缺点。
服务器设置1:手动安装所有软件组件
Apache是一个网络服务器,和大多数软件一样,它有一个安装程序,可以让你轻松地在你的电脑上设置它。不费吹灰之力,你就可以让它为网页服务。然而,有数百个配置选项,除非你知道自己在做什么,否则要让它为开发PHP网站工作是很费时和混乱的。
对于我们运行PHP脚本的目的来说,仅有一台Web服务器是不够的。对于手工安装,你还需要安装PHP--它没有安装程序--并对它进行配置。和Apache一样,有很多选项,而且默认值的设置就像你在运行一个活的网站一样。对于开发代码来说,这很糟糕,因为没有错误显示。如果你犯了一个错误,你会得到一个空白的页面,没有显示出哪里出错。即使是一个不合适的字符--比如一个缺失的大括号或分号--也会给你一个空白的页面,而且没有显示出问题的原因。为了解决这个问题,你需要手动配置PHP安装,调整设置以显示错误信息,并启用其他工具,使开发成为一项更愉快的任务。
还需要配置Apache与PHP对话,这样当有人连接到服务器并请求一个扩展名为.php 的文件时,该文件会首先被发送到PHP进行处理。
为了跟上本书,你还需要MySQL,这意味着也要手动安装和配置它。
Apache、MySQL和PHP都有几十个配置选项,除非你完全知道自己在做什么,否则它们可能很难设置。即使你是一个专家,也至少要花一个小时才能让一切都正常工作!这就是手动安装。
手动安装需要大量的知识或研究,超出了本书的范围。可以肯定的是,能够配置服务器是一种有用的技能,但它并不能帮助你学习如何使用PHP编程--如果你读这本书,你真正感兴趣的是PHP。
这个选项不适合胆小的人,即使对经验丰富的专业人士来说,也很容易错过一些重要的设置。对我们来说,幸运的是,我们不需要担心单独设置和配置所有软件的问题。
服务器设置2。预先包装的安装
手工安装的问题多年来已经被一些开发者团体认识到了,为了克服这些问题,他们建立了预包装安装--一个单一的安装程序来安装PHP、Apache、MySQL和其他相关软件,所有这些都是为像你这样的开发者预先配置好的适当设置。这种软件包最流行的例子是XAMPP:X(任何操作系统)、Apache、MySQL(或更具体地说,MariaDB,MySQL的一个 "分叉",有更好的许可)、PHP和Perl。替代品包括WAMP(Windows、Apache、MySQL和PHP)、LAMP(Linux、Apache、MySQL和PHP)和MAMP(macOS、Apache、MySQL和PHP)。
这显然比手动安装每个软件要简单得多,而且不需要你学习如何配置你的服务器。它快速而简单,比手动安装好得多,尽管这种方法仍有一些你可能遇到的问题,列举如下。
-
你的虚拟主机可能运行的是Linux,但你的电脑可能不是。尽管Apache、MySQL和PHP可以在Windows、Linux或macOS中工作,但操作系统的工作方式有一些很大的不同。在Windows上,文件名是不区分大小写的,这意味着
FILE.PHP与file.php和fIlE.pHp是一样的。而在你的虚拟主机上,几乎可以肯定不是这样的!这就造成了在脚本工作时经常出现问题。这就造成了经常出现的问题,当一个在你的Windows开发服务器上工作得很好的脚本一旦被上传就不能工作了,因为文件在代码中被引用的大小写是错误的。 -
Apache和MySQL是服务器,它们在后台运行。即使在你不开发软件的时候,它们也会运行,占用你的计算机的内存和处理能力。
-
预先打包的软件总是略微过期的。虽然安全修复不是开发计算机的优先事项(你不应该让人们通过网络访问它!),但对开发人员来说,保持最新版本的软件总是有用的,以检查当你的虚拟主机上的软件被更新时可能遇到的问题。如果你的虚拟主机使用的是比你的开发服务器更新的PHP版本,这可能会导致功能被改变或删除的问题。最后,开发人员喜欢在新功能发布时玩弄它们。如果你不使用最新的版本,你就无法做到这一点!
虽然预包装的安装比安装要好得多,但这些问题并没有使它们成为理想。幸运的是,还有一种更好的方法!这就是预包装安装。
服务器设置3:虚拟服务器
让服务器启动和运行的第三种方法是 "虚拟服务器"。虚拟服务器的作用就像一个不同电脑上的网络服务器。这台电脑可以运行任何操作系统,你可以从你的电脑连接到它,就像它在世界的其他地方一样。
虚拟化软件,如VirtualBox和VMware提供的工具是常见的。作为一个网络开发者,你可能熟悉modern.ie等工具,这是微软提供的一项有用的服务,让你下载运行各种版本的Windows、Microsoft Edge和Internet Explorer的虚拟机。如果你想看看你的网站在Windows XP上的Internet Explorer 8是什么样子,你可以下载相关的虚拟机,并在Windows 10/MacOS/Linux桌面上的一个窗口中运行,而不必在你现有的Windows 10、Linux或macOS安装中实际安装和运行带有Internet Explorer 8的Windows 7。
像VirtualBox这样的软件允许你在另一个操作系统中运行一个操作系统。为了测试Internet Explorer 8,你可以在一个虚拟机中运行Windows 7。然而,对于我们运行PHP脚本的目的来说,这允许我们做一些更酷的事情:我们可以在Windows或macOS PC上运行一个安装有PHP、Apache和MySQL的Linux web服务器。
这可以用来让你在完全相同的操作系统上运行你的虚拟主机上使用的完全相同的PHP、MySQL和Apache版本,这可以防止由于版本差异或所使用的操作系统的差异而可能存在的任何问题。
最大的优势之一是,你可以下载预先配置好的虚拟机,比如微软提供的Windows XP和Internet Explorer 8虚拟机,或者是安装了PHP、Apache和MySQL并配置好的虚拟机。这就像预配置的软件包,但在Linux上运行,就像在你的网络上的一个真正的Web服务器一样。
所有这些的缺点是,为了运行你的代码,你必须下载一个完整的操作系统。这意味着更多的下载。这也意味着软件包被锁定在你下载的虚拟机所提供的任何东西上。把PHP7换成PHP8需要下载一个全新的操作系统副本。
服务器设置4:Docker
Docker采用了虚拟化的概念并将其翻转过来。每个程序(或 "服务",在Docker的术语中)都在其孤立的环境中运行,称为容器。
Docker允许软件开发者提供一个配置文件,描述运行一个应用程序所需的所有程序,例如,PHP、MySQL、Apache等。
然后,这个配置文件被当作它自己的应用程序。当你运行应用程序时,Docker会自动下载并设置配置文件中列出的所有软件。
这方面的开销比你想象的要低得多,而且有许多好处。
-
服务器配置是作为应用程序的一部分提供的。当你让你的网站上线时,你可以把所有的配置文件和网站一起上传。在传统模式下,你必须手动设置网络服务器并进行配置。
-
多个网站可以在你的开发机器上同时运行,有不同的配置,甚至不同的服务器软件(例如,一个网站使用Apache,另一个使用NGINX)。如果没有Docker,一般都是安装一个PHP版本,并对机器上运行的每个网站进行单一配置。
-
你可以很容易地换掉一个软件。如果你想把网站从PHP7改成PHP8,只需在一个文件中进行修改,而且你可以在每个网站的基础上进行修改,而不是一次性强制升级到所有的网站。
Docker是目前建立PHP开发环境的最佳选择。如果你想了解更多关于使用Docker为自己建立开发环境的信息,请查看我的文章《用Docker建立现代PHP开发环境》。
入门
在编写任何PHP代码和开发你的网站之前,我们将使用Docker设置开发环境。我已经为你提供了所有的配置,但在你开始之前,你需要安装Docker。
在Windows上的安装
首先,从Docker网站下载并安装最新版本的Docker for Windows。
一旦你安装了Docker(如果要求的话,请重新启动),在你的电脑上创建一个文件夹,用来存放你的网站。这可以是任何地方:你的Documents 文件夹、桌面、外部硬盘等,但要确保你知道这个文件夹的位置,因为你需要经常回到这个文件夹。
你还需要知道如何打开一个终端。Windows 10让这变得简单。在文件资源管理器中打开文件夹,选择窗口左上方的文件菜单,然后点击打开Windows PowerShell。确保你从 "文件"菜单而不是 "开始 "菜单上做这件事,因为从**"文件 "**中点击它将在你选择的文件夹中打开命令提示符。
打开PowerShell后,确认它显示的路径是你选择的文件夹--例如,C:\Users\Tom\Documents\My Website 。然后转到下面的 "开始使用Docker "部分。
在撰写本文时(2021年9月),在当前的Windows 11预览版中,PowerShell已被重新命名为Windows终端,并以不同的方式访问。
- 通过从开始菜单中手动打开一次Windows终端程序来启用该选项。你可以直接打开和关闭该程序。令人费解的是,微软将Windows 11设计成这样一种方式,即打开一个程序会打开另一个程序的隐藏设置,如果你跳过这一步,第三步的菜单项就会丢失。
- 使用文件资源管理器导航到你的文件夹。
- 在主面板上点击右键(应该显示 "此文件夹为空"),选择在Windows终端打开。
注意:这些说明在Windows 11发布时和本书出版后可能会有变化。
继续阅读:在SitePoint 上用Docker设置你的PHP开发环境。