当前位置: 首页 > 图文教程 > 数据库 > MYSQL > Windows XP下PHP+MySQL环境搭建
开始之前
关于本教程
设置好 Web 服务器之后,您将下载和安装 PHP 脚本语言。除了简单的下载操作之外,您还必须对 Apache 进行配置,使其能够将请求传递给 PHP 引擎。通过 Apache,您还将学习如何正确定位脚本文件,以及如何确保它们的安全性。
当您完成了上述操作之后,您将拥有一个完整的开发环境,可以用来测试和开发。
系统需求
您需要的全部软件和硬件是一台运行 Windows XP 的机器(我使用 SP2,但是我在没有 SP2 的环境下运行相同的配置也有几年的时间了)。我将带您完成全部的下载和安装过程,因此您无需任何预先存在的软件。但您需要拥有对机器的管理员访问权限,因此如果您使用的是共享机器,可能会遇到问题。最后,您在使用本教程的过程中需要 Internet 访问来下载软件。然而,一旦您设置好了此环境,就不 需要 Internet 访问了。
开发、测试、部署
开发环境是什么?
如果您从事过正式的开发工作,就应该熟悉术语开发环境。根据您公司的复杂程度,这可能意味着从运行着 10 或 15 个 Apache 实例的 Sparc 10 高端 UNIX box 到具有 IDE(集成开发环境)的膝上型电脑的任何环境。事实上,不同的人可能对此术语有不同的定义。如果您没听说过这个术语,情况可能反而更好 —— 因为您不会像许多开发人员那样对此术语有很多误解。针对本教程的目的,我提出了一个简单的定义:开发环境就是您在其中进行开发的环境。我知道这听起来像是老生常谈 —— 而且我也不应该根据这个术语的字面含义定义它 —— 但是这个定义事实上非常有用。
首先,我假定您是一位开发人员。您编写一些代码,或者您希望编写一些代码,或者有人雇您编写一些代码,总之,您正在编写代码。而且,除非必须用算盘计算,否则您就需要在计算机上工作。那么,这台计算机就是您的开发环境。看到了吧,我告诉过您这非常简单!
更重要的是,您的开发环境仅 指您的计算机。它不是(例如)您将代码加载到其中来检查代码是否有效的测试服务器。它不是位于一个遥远的国家的、您的整个公司用来实现绝密部署的服务器群。它也不是用来在主计算机故障时工作的备用机器。它仅指您在其中编写代码的计算机。
这里的意思是说,任何时候当您将代码移动到另一台计算机、另一个操作系统、另一个具有不同邮编的地区的时候,您都要进行更改。可能您会对您的机器应用一个补丁,但是您无法对目标计算机也应用补丁。可能一台机器运行 Apache,而另一台机器运行 iPlanet。无论在何种情况下,两台计算机永远不会完全相同。而当我谈及开发环境时,我不希望处理更改。因此,开发环境就是您在其中进行操作的机器,而且它和另一地点的其他 机器是不相同的。
您是否认为无需进行任何测试工作?
您和我都清楚:测试很乏味。测试让人痛苦,速度还慢,实在让人兴奋不起来。但是,它能让您保住工作。那些测试自己代码的开发人员能够在周末尽情玩水橇和购买新房子的原因很简单,那是因为他们的代码在部署之后能够正常工作(请参阅 什么是部署?,获得关于部署的更多信息),他们不用担心代码会出现问题。
测试的秘密在于一台计算机(您的开发环境)和另一条计算机(您希望您的代码在其中运行的机器)之间的差别。如果您能够确定这些差别,并解决它们,测试就会变得很容易。例如,如果您的开发环境是一台运行 Windows XP 的 PC(使用 Apache、PHP 和 MySQL),而您计划在一台运行 Apache、PHP 和 PostgreSQL 的 Linux 服务器上运行您的代码,那么就应该注意 Windows XP 和 Linux,以及 MySQL 和 PostgreSQL 之间的区别。因为 Apache 在 Linux 和 Windows 上差不多相同(PHP 也是如此),所以您无需将注意力放在这些应用程序上。
在理想的情况下,您应该拥有三台完全独立的机器用于编程:
开发环境:用于在其中编写代码的机器,根据您喜欢的代码编辑器和用户首选项进行设置。
测试机器:用于测试代码的机器,完全模仿部署服务器进行设置。惟一的区别是:它是一台私人机器,而且最好独立于网络中可能干扰它的其他机器。
部署机器:这是代码最终在其中运行的机器。此机器仅具有运行代码所需的软件,没有用户首选项或开发工具(事实上,如果设置正确,它甚至不允许远程用户登录)。
如果以上是您的设置,那么您真是幸运。通常情况下,您不得不在一台机器上至少结合上述两种角色。例如,您可能在一台膝上型电脑中进行开发,而在一台 UNIX 服务器上进行测试和部署。在这种情况下,您可能要在一个不同的端口(例如 8080 或 9900)上进行测试设置,以便外部世界无法看到您的测试代码。
根据您当前的学习目的,在设置好开发环境并使其运行之前,无需过于担心测试环境。您只需了解您的开发机器中有什么软件以及它和目标部署服务器之间的区别。这将帮助您隔离您必须在测试过程中关注的内容。
什么是部署?
一旦您编写了工作代码,您通常必须确保它不仅能够在您的机器(您的开发环境)上工作,而且能够在它将要在其中运行的机器中工作。因为大多数开发人员使用的服务器都不在其办公室,这意味着经过良好测试的代码要被带离您的开发环境,然后被部署。这可能会涉及以 FTP 方式将代码上传到您的 Internet 服务提供商 (ISP)(一个服务器群,位于一间比您工作的房间冷得多的房间中),或者将一张满是代码的 CD 交给系统管理员。无论是什么情况,这就是您需要将代码部署到另一台机器的时候。
我在本教程中不会过多涉及部署这个主题,但是您需要理解这是在应用程序开发过程中必须处理的一件事。即使只是设置个人 Web 站点上的博客,仍然需要将位于开发环境中的代码部署到某个地方,以便全世界都能够看到它。乍一看,这使开发环境看起来没什么用处。计算机和计算机之间的差异突然冒了出来。然而,这恰恰是使开发环境有用的原因。当您进行部署的时候,您已经在本地机器上编写了代码,并排除了所有软件错误(HTML 被正确编写且在各种浏览器中显示正常;PHP 脚本全都可以执行且是安全的;MySQL 连接工作正常;密码已被设置)。您还在一台类似部署目标的机器上测试了代码,并编写了此过程中的操作指南。因此当您真正部署代码时,成功率是很高的 —— 事实上,部署操作通常也很乏味。不过就是单击 Upload 按钮,Commence FTP 按钮,或者 Burn 按钮,剩下的就是等待了。
然而,如果没有开发环境,这一切就会更像是滚骰子。您上传的是没有运行过(因为没有正确设置开发环境)也没有测试过(如何测试没有在最初位置运行过的东西?)的代码。因此,您不能期望此代码能够正常工作。您若突然在一台实际服务器上测试代码,您的用户、朋友和家人肯定会得到错误和怪异的消息。这可不是开发代码的方式,因此让我们(现在一起)摒弃这种方式,回去设置开发环境。
看起来有点正式了,不是吗?
如果希望构建一个绝佳的 Web 站点,那么 PHP 为您提供了一个实现此目的的有趣、舒适的脚本工具,这看起来可能有点好过头了。如果拥有多台服务器和多个测试人员和开发人员的团队,这自不用担心。然而,即使在单人生产中,您仍然会希望自己的站点在被上传到 ISP 时能够正常运行。如果您记住这些概念(如果不是实际细节的话),那么您将能够发现上传站点时所出现的 bug。您可能还会发现,在知道这些 bug 出现的原因后,您会更加享受这个过程。
设置 Apache Web 服务器
下载 Apache
在开始进行 Web 开发之前,需要一个 Web 服务器。虽然存在大量的商业选择,但是 Apache 仍然是提供 Web 内容方面事实上的标准。而且,Apache 易于配置。它不带花哨的 Web 控制台,我将随时采用 GUI 上的纯文本文件。编辑文本文件非常简单,您只需 Notepad 或 Wordpad 即可。此外,Apache 速度非常快,而 Web 服务器就应该这样,对吗?它应该简单、易于使用且速度快。
要开始,请访问 Apache Web 站点。 在左侧的 Apache Projects 下方,单击 HTTP Server 链接。这会带您进入主 Apache Web 服务器站点。 在这里,单击 Download from a mirror 链接,此链接也位于页面左侧。这将使您进入一个类似图 1 中显示的页面。
向下滚动到 Apache 2.0 section;将会显示类似 "Apache 2.0.54 is the best available version." 之类的内容。现在单击 Win32 binary 的链接。在我写作本文时,文件名是 apache_2.0.54-win32-x86-no_ssl.msi。将此文件保存到磁盘,确保将它存放在您能够记住的位置(没有什么比完成了全部这些步骤,却忘记了存放文件的位置更糟的了)。因为您将仅使用此文件来启动安装,所以可以将此文件放置到桌面上。
安装服务器
双击下载的文件,启动 Apache 安装过程。您将首先看到一个漂亮的徽标和一条欢迎消息。单击 Next 进入下一个屏幕。
您必须接受 Apache 许可条款才能继续。虽然许多人会告诉您快速浏览一下这些内容即可,我还是建议您停下来仔细阅读整个许可条款。您只需细读这一遍,然后在后续的安装中快速浏览即可。对于那些忽视我的许可条款告诫的人来说,Apache 许可条款正如事实上那样没有约束力。基本上,您能够对此软件进行任何操作。更改它、向它添加内容、从其中移除代码;但是,因为您没有使用源代码,所以这对您没有实际影响。接受这些条款,然后再次单击 Next 。
下一个屏幕会为您提供一些选项(终于到这一步了)。类似这种个人安装上的网络域实际上不那么重要。您可以将它设为 ISP 的域(例如 grandenetworks.com),或者希望在家庭或办公室网络中使用的域(例如 gilead.net),或者任何符合基本 Internet 格式的内容。服务器名称应该是和您的计算机的主机名称相同的名称。同样,在个人 Windows XP 安装上,这实际上也不重要(正如很快将看到的那样,可以使用 localhost 来访问此安装)。接下来设置管理员的电子邮件地址;我使用类似 [email protected] 的格式。最后,决定为所有用户还是仅当前用户安装此软件。我倾向于为所有用户安装程序,万一我的妻子也决定将编程作为爱好呢(开玩笑的)。此选项还将服务器设置到默认的 HTTP Web 服务器端口 80(这是您希望的)。
如果本文是一篇关于在产品服务器上设置 Apache 的教程,那么我真的应该在这里花些时间。设置域和服务器名称对于确保其他机器能够访问您的新服务器来说是至关重要的。大多数开发机器是运行在本地网络中的膝上型电脑或台式电脑,这些网络通过 DHCP (Dynamic Host Configuration Protocol) 提供 IP 地址。这意味着每次机器启动时,您可能会拥有不同的 IP 地址,这样域名和主机名称基本上就没用了,至少在其他机器访问您的 Web 服务器时如此。在本步骤中随意设置这些值然后继续。
在下一步中,选择 Typical 设置,然后继续。您可能会缺少在 Apache 模块中进行编译所需的某些文件,但是您可能暂时并不需要。Typical 设置对于您的当前的学习目的来说足够了。接下来,选择安装 Apache 的文件夹;除非您有一个充分的理由来更改默认地址,否则请接受默认地址。这可使升级和重新安装更容易。最后,单击 Install。您将看到几个进程指示条,在等待的时候,您不妨喝点饮料休息一下。在此过程接近完成时,您将看到弹出几个命令 shell (快速显示然后消失的黑色窗口)。您可能还必须让防火墙或 Internet 安全软件知道 Apache 可以接受传入端口上的连接。
上述所有操作完成之后,单击 Finish。删除安装文件(可能位于桌面上,如果您遵循上述操作说明的话),现在您已经完成了安装操作。作为完整性检查,现在您的系统托盘中应该有一个 Apache 小图标在运行,如图 2 所示。
设置文档目录
我更愿意让 Apache 在一个不同的位置查找 Web 文件 —— 自然,此位置位于 My Documents 目录下。这是一个容易实现的更改。
首先,在 My Documents 下创建一个子目录;我使用 websites 作为目录名,因为此名称的含义是不言自明的。请参阅图 3 来获得可视化辅助。
图 3. My Documents 下的 websites 目录
现在您能够告诉 Apache 在这个备选位置查找 Web 文件了。几乎所有 Apache 的配置都通过一个简单的文本文件 httpd.conf 处理,此文件位于 C:\Program Files\Apache Group\Apache2\conf 目录中。打开此文件;它很长,但是我将指导您进行需要的操作。
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
DocumentRoot 是 Apache 用来代表其默认 Web 目录的键。要使 Apache 查找其他位置,只需使用您自己的目录替换此条目即可,如下所示:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Documents and Settings/Brett McLaughlin/My Documents/websites"
请确保路径包括在引号中。这让 Apache 可以处理长 Windows 路径名称。
您还需要在另一个位置进行更改;向下滚动几行,将看到一个如下所示的注释:
#
# This should be changed to whatever you set DocumentRoot to.
#
不用说,遵照此说明进行更改:
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/Documents and Settings/Brett McLaughlin/My Documents/websites">
您必须重启服务器,才能使 Apache 识别这些更改。右击位于系统托盘中的 Apache 图标(如图 2 所示),单击 Open Apache Monitor。然后在此监视器的右侧,单击 Restart。此 Service Monitor 反映了服务器的状态。现在您只需进行一些测试,来查看 它们是否工作正常。
测试安装
在启动 Web 浏览器之前,我必须和您回顾一个概念。请耐心些,我保证情况不会太坏。当您安装 Apache 时,它会在您的机器的 80 端口上设置商店。这很好,因为当您在 Web 浏览器中输入常规 URL 时,浏览器会自动尝试连接所请求的机器上的 80 端口。您可以选择添加一个类似以下内容的端口: http://www.oreilly.com:8080;但是因为您希望连接到默认端口,所以无需指定此额外信息。
这样,剩下的任务就是在端口号之前输入内容了。通常情况下,您将输入类似 radar.oreilly.com 或 www.thepokergeek.net 之类的内容。您之前可能曾经输入过一些内容作为服务器名称(例如 roland.gilead.net),但是这并不意味着当您在浏览器中输入此服务器名称时,它会起作用。您必须确保输入的名称映射到机器的 IP 地址。我在这里不会过多地介绍这些内容,而只会简单地告诉您一个小秘密:您总是可以通过 IP 地址 127.0.0.1 访问您正在使用的机器。这称为环回地址 ,它将您的请求环回到您的机器上。
当然,我讨厌打字,而 127.0.0.1 对于频繁使用来说有点过长了。您可以使用一个快捷方式来代替它,这个快捷方式是名称 localhost。它映射到环回地址,如下面的命令输出所示:
C:\Documents and Settings\Brett McLaughlin>ping localhost
Pinging Cuthbert [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\Documents and Settings\Brett McLaughlin>
请注意,名称 localhost 映射到 127.0.0.1。将此端口、IP 地址和 locahost 联系起来,您应在浏览器地址栏中输入的地址是 http://localhost。这会从位于端口 80 的本地服务器那里请求一个页面。结果应该类似图 4,尽管您将看到明显的错误。
图 4. Apache 报告一个 403 Forbidden 错误
尽管这不是一个典型的 Web 站点,但是它就是 我们想要的结果。记住,您创建了一个新目录(C:\Documents and Settings\Brett McLaughlin\My Documents\websites),并引导 Apache 在此目录中搜索 Web 文件。问题是此目录中目前没有任何文件。因此,Apache 会报告它不会显示您的空目录(一种安全措施)。修正此问题最容易的方法是导航到此目录,并创建一个简单的文件:
<html>
<head>
<title>My First Page</title>
</head>
<body>
<h1>My First Page</h1>
<p>Everything is working now!</p>
</body>
</html>
将此文件保存为 C:\Documents and Settings\Brett McLaughlin\My Documents\websites 下的 index.html 文件。默认情况下,Apache 会查找具有此名称的文件,因此,现在您应该能够重新加载浏览器页面了(或者重新输入 URL,如果您已经关闭了浏览器的话)。这次的响应会更有用些,如图 5 所示。
现在,您已经安装了 Apache,并准备好使用了。去吃点东西,休息一下,然后再回来 —— 您接下来将继续学习 PHP
安装 PHP 解释器
下载 PHP 5
准备好 Apache 之后,就可以开始进行更有趣的工作了。在我看来,PHP 是可用的最好的 Web 编程工具之一。当然,还存在其他选择和大量的应用程序。如果您正在构建大型的服务器端应用程序,那么 Java 可能是最佳选择;如果您是一位真正的黑客,那么具有最大限度灵活性的 Perl 非常合适;JavaScript、AJAX 和 Ruby(尤其是 Ruby on Rails)非常适合高度交互性 Web 站点,例如 Google。但是,如果您只想快速实现一些基本功能,那么我认为 PHP 是最佳选择。它易于设置(您马上就会发现这一点)、能够和 Apache 很好地集成,而且一旦您熟悉了这个环境,就能够实现更复杂的功能。总之,它的确可以称得上是一种易于使用的、可访问的 Web 脚本语言。
当然,无论一种语言如何易于使用,都必须建立开发环境并使其运行。这就是 PHP 的优势。只需几个简短的页面,您就能够使脚本在 Apache 上运行。首先,访问 PHP Web 站点, www.php.net。 请确保不要访问 php.com,这是一个完全不同的网站。
您可以在以后浏览 PHP Web 站点并获得大量的信息(包括入门教程)。现在,您访问这个网站的目的是下载软件,因此请寻找位于页面顶部的下载链接。单击此链接,进入一个类似图 6 的页面。
图 6. 从官方 Web 站点下载 PHP 软件
寻找 Windows Binaries 标题,并找到 PHP 5.0.4 zip package 的链接;单击此链接,然后选择最近的镜像来下载安装程序(不要 下载 PHP 5.0.4 Installer,因为它不包括 MySQL 扩展)。将此文件保存到本地机器;因为它是临时文件,所以我将它放在桌面上。好了,现在可以安装它了。
在 Windows 上安装 PHP
获得 zip 文件之后,双击它来打开此 zip 文件。将此 zip 文件中的所有内容解压缩到 C:\PHP。
接下来做什么?哦,您需要简单地看一下进度条,然后安装就完成了。打开 C:\PHP ,您应该看到类似图 7 的内容。
图 7. 安装在 C:\PHP 的 PHP 解释器
下一步是创建一个可用的 INI 文件,此文件会告诉 PHP 在被其他应用程序(例如 Apache)调用时如何反应。创建 INI 文件的最佳方式是从模板复制一个文件,然后将其重命名为 php.ini。 在 C:\PHP 中查找名为 php.ini-recommended 的文件。复制此文件并将其粘贴到相同的目录中;然后将其重命名为 php.ini。这就是需要对它进行的所有操作。以后您将回过头来重新查看这个文件,但是现在,这就是开始运行所需的全部操作。
此过程不会 设置 PHP 使用 Apache。因此,让我们回过头来看一些其他的文本文件和手动配置。
将 PHP 连接到 Apache
启动文本编辑器,并打开 Apache 的 httpd.conf 文件,就像您在之前部分中做的那样。搜索 ScriptAlias,应该看到类似如下的内容:
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
对于 /cgi-bin/来说,此条目告诉 Apache 如何处理任何包含 cgi-bin 目录的 URL。例如,如果您请求了 http://www.newInstance.com/cgi-bin/mail-me,Apache 不会在 cgi-bin 目录中查找一个名为 mail-me 的文件。相反,ScriptAlias 命令会告诉 Apache 查看另一个目录 —— 在本例中,这个目录是 C:/Program Files/Apache Group/Apache2/cgi-bin/。这是至关重要的,因为您不会希望将脚本存储在可通过 Web 访问的目录中。因此,您需要为 PHP 脚本添加一个条目。如下所示:
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
ScriptAlias /php/ "C:/PHP/"
您可能认为 C:/PHP 不是存储 Web 站点脚本的好地方。这绝对是正确的;然而,您将告诉 Apache 通过 PHP 解释器处理所有以 .php 结尾的文件,而无需考虑这些文件的位置;换句话说,无需担心这个问题。
接下来,您需要告诉 Apache 以 .php 结尾的文件必须作为应用程序处理;尤其是,您希望为 PHP 文件分配一个类型,然后您就能够指示 Apache 以特定方式处理它们。在 ScriptAlias 条目下,添加以下条目:
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
ScriptAlias /php/ "C:/PHP/"
AddType application/x-httpd-php .php
现在您只需告诉 Apache 当它碰到这种新类型(链接到以 .php结尾的文件)时应该进行什么操作即可。基本上,这仅涉及告诉 Apache 运行什么程序,以及将 PHP 脚本交给什么程序;当然,这个神奇的程序就是您刚刚安装的 PHP 解释器。将此指令直接添加到刚才添加的两个指令下方:
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
ScriptAlias /php/ "C:/PHP/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"
请记住,Apache 已经知道将 /php/ 翻译为 C:/PHP/,因此这实际上将 PHP 应用程序类型分配给解释器 C:/PHP/php-cgi.exe。当然,您可以通过浏览文件系统中的目录的方式验证这些文件是否存在。
完成上述操作之后,重启 Apache,并确保您没有犯错误。如果当您尝试输入 http://localhost 进行简单的测试时一切正常,那么您就成功了。
测试 PHP 安装
要进行的关于 PHP 方面的工作已经不多了。首先,确保 PHP 脚本运行正常。再次打开文本编辑器,并输入以下代码:
<html>
<head><title>PHP Installation Test</title></head>
<body>
<?php phpinfo(); ?>
</body>
</html>
将此文件作为 index.php 保存在您的 Web 站点的根目录中:C:/Documents and Settings/Brett McLaughlin/My Documents/websites。当完成此操作后,应该看到如图 8 所示的内容。
图 8. 编辑一个示例 PHP 脚本
现在您能够将此文件作为正常 URL 的一部分请求:http://localhost/index.php。打开您最喜欢的浏览器,查看得到的内容。它应该类似图 9。
图 9. phpinfo() 命令输出有用的调试信息
很明显,phpinfo() 命令为您提供了大量关于您的机器、PHP 解释器以及开发环境的有用信息。而且,此过程也证明了 PHP 安装正常。
允许 PHP 脚本作为 index 页面
您可能希望为 Apache 和 PHP 安装最后添加一点小内容。在某些情况下,您可通过诸如 http://localhost/my-script-name.php 之类的 URL 访问在上一部分看到的脚本。然而在其他情况下,您可能希望您的主页是 PHP 脚本。如果您在整个站点中还使用了其他脚本元素,且不希望用户必须输入一个特定于 PHP 的扩展名,那么此操作就非常有用。换句话说,您希望 .php 成为默认文件的有效扩展名,就像 .html 一样。例如,名为 index.php 的文件会被默认加载,就像 index.html 一样。
要进行此更改 —— 是的,您猜到了 —— 请再次打开 Apache 的 httpd.conf 文件。这次搜索 DirectoryIndex,您将看到类似如下的内容:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var
将 index.php添加到此文件清单中:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var index.php
现在重启 Apache,并输入 URL http://localhost/z(不指定 PHP 文件)。您看到的内容应该和您上次输入 My First Page 的 URL 时看到的内容完全相同。吃惊吗?您有一个名为 index.php 的文件,那么这是怎么回事呢?哦,问题是 Apache 以指定的顺序查找这些文件。在此例中,它找到了 index.html ,因此它在找到 index.php 之前就停止了查找。
您可以通过调整 httpd.conf 中的顺序的方式解决此问题,但是这会干扰正常的 Web 服务器行为。和此(过激的)步骤相反,您只需将您的 Web 站点根目录中的 index.html 重命名为 index.old 即可。然后返回并重载浏览器(或重新输入 http://localhost/)。现在 Apache 找不到 index.html,它就寻找 index.html.var (此文件不存在),最后寻找 index.php。它加载了此文件,您应该看到图 9 中的内容。
自我陶醉一下吧。您现在拥有了一个工作正常、功能完善、适当定制的 Apache 和 PHP 开发环境。
安装 MySQL
下载 MySQL
进行到这一步,下载和安装软件应该属于常规任务了。要安装 MySQL,在线访问 MySQL Web 站点。 您将在顶部看到几个选项卡;单击 Developer Zone 选项卡来打开其下的子菜单。单击 Downloads。向下滚动并选择 MySQL 4.1 GA release(参见图 10)。
安装 MySQL
打开下载的 zip 文件,解压缩安装程序(setup.exe)。双击扩展的安装程序,安装就会开始。首先需要选择安装类型:
Typical:安装 MySQL 最常用的选项。基本上是让 MySQL 为您做出选择。
Complete:完全安装。安装 MySQL 的全部内容。
Custom:面向像我一样有控制欲望的人,这将允许您调整每种可能的选项。
虽然我通常推荐 Custom 选项,但是设置开发环境还是选择 Typical 选项比较好。在下一个屏幕中确认您的选择,然后选择 Install。在安装过程中您可以休息一下。
接下来,可以登录或创建一个新的 MySQL.com 帐户。是注册、登录或跳过此步骤由您决定(我自己有一个帐户)。完成此步之后,安装操作就完成了。最后一个选项是立即启动和配置 MySQL,您应该选择此选项。
配置 MySQL 实例
安装完成之后,MySQL 会启动 MySQL Server Instance Configuration Wizard。(您可以通过 Start > Programs > MySQL > MySQL 4.1 > MySQL Server Instance Config Wizard访问此程序。)选择 Detailed Configuration 选项来开始使用向导。
服务器类型,选择 Developer Machine;正如此向导所声明的那样,这是面向您在其中开发代码、且必须运行几个其他应用程序(例如 Apache)的机器的正确选择。数据库,选择 Multifunctional Database 选项(同样,这是常见的选择且能够很好地工作,因为您将使用 MySQL 进行各种不同的操作)。
接下来,设置 InnoDB 表空间的目录。如果您阅读了这里的小号字体部分,您将意识到只需单击 Next 然后接受默认设置即可,这也是我推荐的操作。下一个屏幕提示您选择连接数。您应该或者选择 Decision Support (此选项假设约 20 个连接),或者选择 Manual Setting ,然后选择一个较低的数字。因为只有我一个人使用我的机器,且我只将 MySQL 用于 Web 应用程序,所以我选择 Manual,并将并发连接数设为 10(此数字可能仍然高于我真正需要的数字)。我建议您考虑类似的设置。
您应该选择启用 Enable TCP/IP Networking 选项,默认端口 3306 就可以了。您还应该接受 Standard Character Set,除非您有充分的理由使用 UTF8(我的应用程序中不使用其他语言,但是如果您的应用程序中使用其他语言,请选择 UTF8)。
下一个屏幕有一些重要的选项。首先,将 MySQL 安装为 Windows 服务,并确保选中了 Launch the MySQL Server automatically 选项。这将确保当机器重启时,MySQL 也会启动;Apache 已经进行了相同的设置,因此这么做是合理的。另外,选中 Include Bin Directory 选项;这确保您能够运行 MySQL 工具,而无需浪费时间来手动处理 PATH。
下一步是设置根密码;请选择一个密码。我强烈建议您不要 创建匿名帐户。这不是个好主意,既然这样,在开发环境中最好不要设置匿名帐户。
最后,选择 Execute 来使对数据库进行的所有这些设置生效。此处理完成之后,可以选择 Finish 退出实例配置。现在,数据库已经准备好可以使用了。
创建一个新数据库
现在,需要在 MySQL 安装上创建一个新数据库。因为已经在 PATH 中设置了 MySQL 脚本,所以这很容易。打开一个命令提示符窗口(选择 Start > Run 并在 Run 对话框中输入 cmd),然后输入以下命令:
mysqladmin -u root -p create DB-DEVEL
输入您选择的密码,并单击 Enter。除非出现问题,否则不会从 MySQL 获得任何反馈(这有点令人困扰)。在您继续检查之前,先来了解一下您刚才所进行的操作。
mysqladmin 是 MySQL 的管理工具。它位于 MySQL 的 bin/ 目录中,此目录已被配置向导添加到系统的 PATH 中,因此可以直接访问此程序(就像我们在本文中所做的一样)。
-u root 告诉 MySQL 作为根用户登录,您之前应该已经为根用户设置了密码。如果不使用此选项,MySQL 会尝试作为 ODBC@localhost 用户登录;而这是没有用的,因为此用户并不存在!
-p 指示 MySQL 提示您输入密码。您可以在命令行中输入密码,但是此密码不是隐藏的 (******),这不是一个好做法。您应该尽量为所有的 MySQL 交互使用 -p 标记。
create DB-DEVEL 告诉命令应该进行的操作;在本例中,它指示 MySQL 创建一个名为 DB-DEVEL 的新数据库。我个人给我的数据库名称加上 "DB" 作为前缀,用来提醒我这是一个数据库,而 DEVEL 指的是开发 (development);如果您愿意,可以使用其他数据库名称。
因为 MySQL 不会提供太多的反馈,所以应该确保此命令确实有效。要启动 MySQL 监视器,请在命令行中输入 mysql -u root -p。输入根密码后,将看到类似以下的内容:
C:\>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
您将在这里进行大多数数据库操作 —— 从创建表到输入数据。要确保您刚才创建的数据库确实 被创建了,请输入 use DB-DEVEL。 use 告诉 MySQL 切换到指定的数据库。如果一切正常,您将看到以下输出:
C:\>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use DB-DEVEL
Database changed
mysql>
如果此数据库不存在,您会看到以下错误信息:ERROR 1049 (42000): Unknown database 'DB-DEVEL'。请返回到之前的操作步骤并再次尝试,直到您创建了数据库为止。然后重新回到本步骤,继续进行。一旦您验证了数据库确实存在,就可以输入 exit 来离开 MySQL 监视器。
添加表
创建了数据库之后,就可以向其中添加几个简单的表和数据,以便在 PHP 测试中使用。创建一个新的文本文件,并将其命名为 create-sample-tables.sql。此文件的内容应该类似以下内容:
CREATE TABLE users (
user_id INT NOT NULL,
username TEXT(8) NOT NULL,
firstname TEXT(35) NOT NULL,
lastname TEXT(50) NOT NULL,
PRIMARY KEY (user_id)
);
CREATE TABLE user_websites (
website_id INT NOT NULL,
user_id INT NOT NULL,
website_url TEXT NOT NULL,
PRIMARY KEY (website_id)
);
这会创建一个名为 users 的表和一个名为 user_websites 的表。其余部分的含义是显而易见的。您现在可通过如下方式将此文件馈送到 MySQL:
C:\>mysql -u root -p DB-DEVEL < create-sample-tables.sql
Enter password: ********
此命令的前一部分应该是您所熟悉的内容。我将 DB-DEVEL 添加到末尾,这会告诉 MySQL 启动并连接到指定的数据库(一个登录的快捷方式,然后输入 use DB-DEVEL;)。然后,< 符号告诉 MySQL 接受您刚才创建的 SQL 文件作为输入。不幸的是,MySQL 仍然不会提供任何反馈(除非有错误发生)。在任何情况下,您都可将沉默视作通过。
同样,请检查您的工作。通过 mysql -u root -p DB-DEVEL 登录到 MySQL 监视器,然后输入 describe users;。您应该会看到一个对所创建的表的文本描述:
mysql> describe users;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| user_id | int(11) | | PRI | 0 | |
| username | tinytext | | | | |
| firstname | tinytext | | | | |
| lastname | tinytext | | | | |
+-----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
您可以对 user_websites 表进行相同的操作:
mysql> describe user_websites;
+-------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| website_id | int(11) | | PRI | 0 | |
| user_id | int(11) | | | 0 | |
| website_url | text | | | | |
+-------------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
最后,在这里添加一些简单的数据。创建以下文件,并将其命名为 insert-sample-data.sql:
INSERT INTO users VALUES (1, 'bmclaugh', 'Brett', 'McLaughlin');
INSERT INTO users VALUES (2, 'gqg10012', 'Gary', 'Greathouse');
INSERT INTO users VALUES (3, 'reckstei', 'Bob', 'Eckstein');
INSERT INTO users VALUES (4, 'mikeh', 'Mike', 'Hendrickson');
INSERT INTO user_websites VALUES (1, 1, 'http://www.newInstance.com');
INSERT INTO user_websites VALUES (2, 1, 'http://www.oreilly.com');
INSERT INTO user_websites VALUES (3, 4, 'http://www.oreilly.com');
同样,这也非常直接。通过以下命令将此脚本馈送到 MySQL:
C:\>mysql -u root -p DB-DEVEL < insert-sample-data.sql
Enter password: ********
现在,登录到数据库来确认这些数据位于正确的位置:
C:\>mysql -u root -p DB-DEVEL
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from users;
+---------+----------+-----------+-------------+
| user_id | username | firstname | lastname |
+---------+----------+-----------+-------------+
| 1 | bmclaugh | Brett | McLaughlin |
| 2 | gqg10012 | Gary | Greathouse |
| 3 | reckstei | Bob | Eckstein |
| 4 | mikeh | Mike | Hendrickson |
+---------+----------+-----------+-------------+
4 rows in set (0.00 sec)
可以对 user_websites 表执行相同的检查,并应该得到类似的结果。设置好一些示例数据之后,现在需要做的全部工作就是编写一些 PHP 代码来将数据库和您的 Web 站点连接起来。
将 MySQL 支持添加到 PHP
在编写任何代码之前,您必须告诉 PHP 加载 MySQL 所需的库。可通过您在 在 Windows 上安装 PHP 部分中设置的 php.ini 文件实现此操作。打开此文件,并查找以下代码行:
;extension=php_mysql.dll
此代码行告诉 PHP 加载 MySQL DLL(动态链接库),这会允许您的 PHP 脚本使用 MySQL 命令。然而,此代码行前面的 ; 是注释指示符;请移除它以便使此代码行类似以下内容:
extension=php_mysql.dll
现在,进入命令行,并尝试通过 -i 切换符运行 PHP 解释器,它会告诉您加载了哪些模块:
C:\>c:\php\php -i
您可能会在这里得到类似以下内容的错误信息:
PHP Startup: Unable to load dynamic library 'C:/foo/ext/php_mysql.dll' -
The specified module could not be found.
注意:为了便于显示,以上消息可能以多行的形式显示。
别担心。这没问题。PHP 现在正在搜索 MySQL 库,但是不知道如何找到它们。请再次打开 php.ini 并搜索 extension_dir。您需要使此条目类似如下内容:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/PHP/ext/"
这会告诉 PHP 在 C:/PHP/ext/ 目录中搜索 php_mysql.dll 模块;如果查看此目录,就会看到此文件。保存 php.ini 并尝试再次运行 php -i 。如果一切均被正确地设置了,那么您将得到关于解释器的大量信息。这就是所想要的内容。您甚至可以向上滚动来查看一些 MySQL 配置数据,如图 11 所示。
现在,您就可以编写一些 PHP 代码了。
在 PHP 脚本中连接到 MySQL
您已经设置好了 Apache、运行了 PHP、安装了 MySQL,并且已经将 MySQL 扩展加载到了 PHP 中,现在您终于可以编写 PHP 代码了。关闭所有这些配置文件,并打开一个新的空文件。输入以下文本:
<html>
<head><title>MySQL Connection Test</title></head>
<body>
<?php
$conn = @mysql_connect("localhost", "root", "your-password");
if (!$conn)
die("<p>Error connecting to MySQL: <i>" . mysql_error() . "</i></p>");
echo("<p>Connected to Database Successfully.</p>");
if (!@mysql_select_db("DB-DEVEL", $conn))
die("<p>Error selecting DB-DEVEL database: <i>" . mysql_error() . "</i></p>");
echo("<p>Selected DB-DEVEL database successfully.</p>");
mysql_close ($conn);
echo("<p>Disconnected</p>");
?>
</body>
</html>
如果您对编写 PHP 代码不是很熟悉的话,那么这些内容对您来说太复杂了,但是它实际上非常简单:
mysql_connect 试图通过所提供的主机名、用户名和密码连接到一个 MySQL 数据库。确保您使用真实的密码来替换 your-password 。
die 生成错误消息,并停止进一步的 PHP 处理。它在 conn 变量出现错误时(即 mysql_connect 不成功的情况)使用。
echo 的作用和它的含义一样;它生成文本(在本例中,它生成 HTML)。
mysql_select_db 试图通过您传递给它的连接对象(代表到数据库的连接的 conn 对象)来切换到所提供的数据库。
mysql_close 哦,您可以自己猜出它的作用。
正如您所看到的,确保开发环境正常工作并不需要很多的代码。将此脚本保存为 test-connect.php,放到和其他 Web 文件(例如 index.php)相同的目录下,然后运行它。最后,在您的 Web 浏览器中加载此文件:http://localhost/test-connect.php。您应该看到如图 12 所示的内容。
如果您的测试成功了,就祝贺一下自己吧!您已经安装了 Apache、PHP 和 MySQL,甚至有了一个到数据库的有效连接。您就要大功告成了。剩下要做的只是连接到示例数据,并确保能够正确检索数据。
通过 PHP 从 MySQL 检索数据
在结束之前,我希望向您快速介绍一下如何连接到 MySQL,并从数据库中检索行。我不会涉及细节问题(本文不是 PHP 教程),我只希望给您提供一个用于运行的示例脚本来确保一切正常。它也将是您开始编写您自己的定制 PHP 代码的一个很好的起点。将此文件保存为 list-users.php。
<html>
<head><title>Listing of Users in Database</title></head>
<body>
<?php
$conn = @mysql_connect("localhost", "root", "seth0723");
if (!$conn)
die("<p>Error connecting to MySQL: <i>" . mysql_error() . "</i></p>");
if (!@mysql_select_db("DB-DEVEL", $conn))
die("<p>Error selecting DB-DEVEL database: <i>" . mysql_error() . "</i></p>");
?>
<table border="1">
<tr><th>Username</th><th>Full Name</th><th>Website</th></tr>
<?php
$select = ' SELECT u.username, u.firstname, u.lastname, w.website_url';
$from = ' FROM users u, user_websites w';
$where = ' WHERE u.user_id = w.user_id';
$order = ' ORDER BY u.lastname, u.firstname';
$users = @mysql_query($select . $from . $where . $order);
if (!$users) {
echo('</table>');
die('<p>Error retrieving users from database!<br />'.
'Error: ' . mysql_error() . '</p>');
}
while ($user = mysql_fetch_array($users)) {
$user_username = htmlspecialchars($user['username']);
$user_firstname = htmlspecialchars($user['firstname']);
$user_lastname = htmlspecialchars($user['lastname']);
$user_website = htmlspecialchars($user['website_url']);
echo("<tr>\n");
echo("<td>$user_username</td>\n");
echo("<td>$user_firstname $user_lastname</td>\n");
echo("<td><a href=\"$user_website\">$user_website</a></td>\n");
echo("</tr>\n");
}
?>
</table>
<?php
mysql_close ($conn);
?>
</body>
</html>
这个简单的 PHP 页面会连接到 MySQL 数据库、切换到 DB-DEVEL 表,并拉出具有 Web 站点 URL 的所有用户。它没有浮华的界面,其格式看起来非常简单,但是它说明了一点:通过 PHP 访问 MySQL 数据非常容易。图 13 显示了此脚本的运行结果。
图 13. 具有 Web 站点 URL 的用户的 HTML 清单
好了!您的开发环境已经设置好可以使用了。
结束语
至此,您已经在 Windows XP 机器上设置好了一个完整的开发环境。无论您使用的是并非始终连接到 Internet 的膝上型电脑,还是一天使用 8 到 10 个小时的台式电脑,您都不需要仅仅为了测试简单的 PHP 脚本而连接到您的 ISP。借助于最新版本的 Apache Web 服务器、PHP 5 和 MySQL,您尽可以进行编程和部署 —— 这些操作全都可以在您的本地机器上实现。事实上,这就是我的膝上型电脑的设置 —— 而我通过本教程又设置了一台新的膝上型电脑。
现在您已经熟悉了配置文件,可能还希望对您的个人设置进行一些修改。您可能希望创建您自己的 Apache 虚拟目录、运行多个版本的 PHP 来实现向后兼容性、或者甚至生成几个 MySQL 实例来分解您的数据。无论您使用什么特定配置,我都希望您能意识到您无需为构建和测试您的应用程序而在 ISP 上浪费精力,您当然也无需仅仅为了此目的而购买和维护一个 Linux 服务器。虽然 Linux、Mac OS X 和大型操作系统(例如 Solaris)有诸多很好的用途,但是仅为了一些简单的脚本应用程序而将它们用于分级机器显然不属于这些用途。
无论您如何使用本教程,也无论您连接到 Internet 与否,我都希望本教程能够使您的开发水平更上一层楼。享受其中的乐趣吧!
学习
获得产品和技术
关于作者
Brett McLaughlin 从 Logo 时代就开始使用计算机。(还记得那个小三角吗?)近年来,他已经成为 Java 和 XML 社区最著名的作者和程序员之一。他曾经在 Nextel Communications 实现过复杂的企业系统,在 Lutris Technologies 编写过应用服务器,最近,他在 O'Reilly Media, Inc. 继续撰写和编辑这方面的图书。Brett 即将出版的新书 Head Rush Ajax 为 Ajax 带来了获奖的革命性 Head First 方法。最近的著作 Java 1.5 Tiger: A Developer's Notebook 是关于 Java 技术最新版本的第一本书。经典的 Java and XML 依然是在 Java 语言中使用 XML 技术的权威著作。
评论 (0) All