本节书摘来自异步社区《php和mysql web开发从新手到高手(第5版)》一书中的第1章,第1.3节,作者【澳】kevin yank,更多章节内容可以访问云栖社区“异步社区”公众号查看
php和mysql web开发从新手到高手(第5版)
在本节中,我们将介绍如何在一台运行mac os x version 10.5(leopard)的mac计算机上开始运行一个安装了php和mysql的web服务器。如果你使用的并不是mac计算机,可以跳过本节。
mac os x将apache和php都作为标准安装组件来安装,它是唯一这么做的面向消费者的os(实际上,它还附带了ruby、python和perl,所有这些都是流行的web编程语言)。也就是说,只需要几个步骤就能启动apache和php。但是,你还是需要一个mysql数据库服务器。最简单的方法是忽略内建的软件,并且用一个方便的、一体化的安装包来安装你所需要的所有部件。
mamp(表示mac、apache、mysql和php)是一款免费的、一体化的程序,它包含了apache web服务器、php和mysql的最新版本。让我们来看看安装它的过程。

在本书之前的版本中,我建议你安装mac os x所自带的apache和php的内建版本,并且使用mysql的官方安装包来安装它。我认为,对于初学者来说,这是很好的做法,因为这让你能够很好地体会这些软件是如何配合工作的。
遗憾的是,这意味着很多读者的最初的几个小时要花在“php落地”上,按照详细安装说明,在一个漫长的过程中跌跌撞撞地前进。更糟糕的是,有时候某一个软件包的一些细小的变化,就意味着这些说明的细节部分变得过时了。
如今,我坚信学习php和mysql最好的方式是直接开始使用它们。安装的过程越快速、越省力就越好。这就是为什么在本版中我要求你使用mamp。
此外,我们有很多的机会去了解这些软件,那又何必给计算机安装一堆独立且不相关,而又很难删除的软件呢?
尽管如此,如果你是喜欢坚持自己动手的人,或者是一位技术高手,又或者如果你只是想学完本书并看看专业人士是如何做的,那么,我在附录a中给出了每一个单独软件包的详细安装说明。
如果你是上述的某一类读者,建议你按照附录a而不是本节的介绍去做。
1.从mamp的web站点下载最新版本(需要免费的mamp,而不是商业版的mamp pro)1。在下载该文件之后(在编写本书时,mamp 2.0.5大约是116mb),双击该文件以解压缩安装程序(mamp.pkg)。然后,双击它并启动mamp安装程序,如图1.8所示。
下一个步骤需要一些技巧。在开始任意地单击按钮进行安装之前,请务必先阅读注意事项。
2.在安装过程中,安装程序会提示你选择是否执行标准安装。在这一步骤中,单击customize按钮而不是install按钮。这会使得你有机会选择不采用mamp pro(安装程序会悄悄地作为默认项,希望你安装这个版本,从而让你决定购买该版本)。这很重要,因为如果安装了mamp pro,在启动免费版的mamp的时候将会显示一条令人烦恼的警告消息。
如果你错过了这一步,并且已经允许安装程序在系统上安装了mamp pro,那么删除它也很容易。
打开applications文件夹,双击新建的mamp pro文件夹,双击mamp pro uninstaller以运行它。选中uninstaller窗口中的每一个复选框。一旦选中了所有这些复选框,单击uninstall按钮。最后退出uninstaller。
浏览applications文件夹,并且在那里找到新的mamp文件夹。打开它,双击mamp图标以启动mamp。当mamp启动的时候,将会出现如下的情况:首先,出现如图1.9所示的mamp窗口。两个状态指示标志将从红色变为绿色,表示内建的apache和mysql服务器启动了。接下来,mamp将会打开默认的web浏览器,并且加载mamp的欢迎页面,如图1.10所示。
计算机上运行的每一个服务器,都监听一个唯一的端口号。通常,web站点寄存在端口80上,并且,当url没有指定端口号的时候,浏览器就使用80端口来连接服务器。默认情况下,mamp配置为apache监听8888端口,而mysql监听8889端口。这就确保了如果mac已经安装了一个web服务器并监听80端口,或者已经安装了一个mysql服务器监听3306端口2(这是标准的mysql服务器端口)的话,mamp将仍然能够继续工作。
本书后续内容中的代码和说明,都将假设你的web服务器在80端口上运行,并且mysql服务器在3306端口上运行。现在是一个很好的时机,可以查看下mamp是否使用了这些标准的端口正常运行。按照如下步骤即可。
1.在mamp窗口中,点击stop servers按钮,等待指示标志变为红色。
2.单击preferences…按钮并导航到ports标签页。
3.单击set to default apache and mysql ports按钮,以便apache能够使用80端口而mysql使用3306端口。单击ok按钮。
4.单击start servers,mamp将会提示你输入密码。因为要在80这样的一个“官方”internet端口上运行服务器,需要有管理员权限。
如果在步骤1中,有一个或两个指示标志没有变成红色,或者如果欢迎页面没有正确载入,那很可能有端口冲突。在mac上的某处,有另外一个web服务器或mysql服务器已经使用了一个端口或两个端口。一个需要检查的位置是system preferences中的sharing图标。如果web sharing是打开的,mac os x的内建apache是在运行中(通常在端口80上)的。另一个选择是尝试关闭各种应用。例如,在某些条件下,skype for mac会阻止mamp的mysql服务器启动。
对默认的mamp配置所做的最后一项修改,就是打开php错误显示。默认情况下,当你在php代码中犯下一个严重的错误的时候(相信我,我们都会犯很多错误),mamp的apache服务器将会产生一个空白的web页面。作为一名开发者,当你需要搞清楚出现了什么样的输入错误的时候,这真的帮不上什么忙。我更喜欢在浏览器窗口中看到一条详细的错误消息。
mamp默认关闭了错误显示。其原因是,当你决定使用它寄存一个公开的、可供访问的web站点的时候,当你犯错的时候,站点的访问者将不会看到这令人尴尬的错误消息。然而,实际上,一个公开web站点遭遇尴尬,这在其开发阶段是很平常的事情。
要打开php错误显示,你可以在mac的applications文件夹中打开mamp文件夹。从那里开始,继续向下找到bin/php/。针对mamp所附带的每个php版本,这个php文件夹下面都包含了一个子文件夹。你可以在mamp的preferences下仔细检查以确认版本。但是,有可能已经配置为运行最新的版本了。因此,打开这个最新版本的文件夹(在我的mamp 2.0.5版本中,是php5.3.6)。然后,再打开conf子文件夹。用你喜欢的文本编辑器打开php.ini文件(textedit就是不错的文本编辑器),你会看到如下几行内容:
将最后一行的off改为on,并保存该文件。现在,单击stop servers按钮,然后在mamp中单击start servers按钮,以新的配置来重新启动apache。好了,php现在将会显示有用的(如果有点让人精神崩溃的话)错误消息。
当你用完mamp的时候,通过单击mamp窗口中的quit按钮,关闭掉它(以及它的内建服务器)。当你下一次需要对数据库驱动的web站点做些事情的时候,只要重新启动它就好了。
在mamp中设置mysql root密码
一旦mamp在你的mac计算机上启动并运行,你接下来的工作应该是为mysql设置一个root密码了。
mysql只允许授权的用户浏览和操作存储在其数据库中的信息。因此,你需要告知mysql,谁是经过授权的用户而谁不是。当你初次安装mysql的时候,它配置了一个名为“root”用户,该用户能够访问mysql并且执行大部分的任务,而不需要输入密码。因此,你的首要任务是为该root用户分配一个密码,以使得未经授权的用户无法操作你的数据库。
意识到能够通过同一网络中的任意计算机访问mysql(就像一个web服务器一样)是很重要的。如果你在连接到互联网上的一台计算机上工作,那么,根据你所采取的安全性措施,世界上的任何人都可能连接到你的mysql服务器。因此,显然选择一个难以猜测到的密码是很有必要的。
要设置mysql root密码,首先要确保mamp及其服务器在运行中。然后,打开mac os x terminal应用程序(可以在applications文件夹下的utilities文件夹中找到),并且输入如下的命令(在每条命令之后按下enter键):
这会导航到你的mamp安装位置的library/bin/子文件夹,这是terminal工具程序所在的位置。
用你想要分配给root用户的密码替代newpassword。
当你按下enter键的时候,将会提示你输入当前的密码: root。
3.退出terminal。
现在密码设置好了,但是带来了一个新的问题:mamp自身需要不受限制地访问mysql服务器,以便能够控制它。如果此时你在mamp中点击open start page按钮,将会收到一条错误消息:“error: could not connect to mysql server!”。显然,我们需要告知mamp新的mysql root密码是什么。
你必须编辑mamp文件夹中的几个文件,以使其能够再次工作。可以在textedit中(或者你喜欢的任何文本编辑器中),打开这些文件中的每一个。
textedit有一个糟糕的习惯性错误,就是在打开.php文件的时候会将其误当作是html文档,并且试图将其显示为格式化文本。为了避免这一点,你必须在open对话框中选中ignore rich text commands复选框。
/applications/mamp/bin/mamp/index.php
找到如下所示的一行:
用你的新的root密码(即'newpassword')替换第二个'root'。
/applications/mamp/bin/phpmyadmin/config.inc.php
这是一个很大的文件,因此,你可能需要使用文本编辑器的find功能来找到如下的内容:
同样,用你的新的root密码(即'newpassword')替换第二个'root'。
/applications/mamp/bin/checkmysql.sh
/applications/mamp/bin/quickcheckmysqlupgrade.sh
/applications/mamp/bin/repairmysql.sh
/applications/mamp/bin/stopmysql.sh
/applications/mamp/bin/upgrademysql.sh
小文件中的内容都是以如下的形式开头(这是以checkmysql.sh为例)的:
看到-proot了吗?p表示“password”,而剩下的内容是密码。将其更改为新的密码(即-pnew password)。
对这5个文件都做同样的修改。
做了这些修改并保存之后,mamp应该又能够正常工作了。而mysql服务器对于外围的入侵来说也已经是很好、很安全的了。
哦,不要忘了这个密码。如果忘记的话,再要修改会很困难。但是,我将在第10章中介绍如何做到这点。可以在下面记下你的mysql root密码,以备不时之需:
2当然,无法保证另一个程序不会在你的系统上使用端口8888或8889。我在使用yazsoft的playback(一款流媒体播放软件,可以用于xbox 360和playstation 3这样的游戏控制台)的时候就碰到过这种麻烦,它运行的时候就使用端口8888。如果有问题的话,请尝试另一个不同的端口号。