【HowTo】在Mac下使用MAMP Pro环境

以前,我使用 Windows 作为自己的工作系统,后来,改用 Mac 作为自己的主要工作系统了。

在 Windows 下,快速搭建*AMP 环境,使用 xampp 或者 WAMP 之类的集成包,会一口气装好所有需要的软件,而在 Mac 下,相应的,做得比较好的是 MAMP,我选用的是与之对应的收费版本 MAMP Pro,总体差别不大。

你可能要说了,Mac 自带 Apache 的啊,也自带 PHP,为啥要装东西啊,原生的不好么?

嗯,很好的问题。

MAMP 集成度更高一些,比如 Mac 就不提供 MySQL,就很麻烦了,另外 Apache 的各种模块,也难保 Mac 自带的是哪个版本的,MAMP 至少带有四个版本以上的 PHP,可以随便切换,也可以根据项目制定,另外集成了自动化配置 VirtualHost 功能,这个极大地方便了环境搭建。

MAMP 是一个沙盒,不像 Mac 自带的环境,散布在系统各处,主要指配置文件,二进制文件,如果你要配合安装一些模块,涉及到编译,安装等等,你就会把各种配置文件和二进制文件搞到系统深层目录里,多数目录都要 sudo 才能获得写权限,而你装进去的这些东西,可能永远没法执行可逆操作了,除非你清楚记得所有做过的变更。相应地 MAMP 是在一个 App 文件夹里,卸载的时候拖住删了就行了。

使用 MAMP 环境,可以将代码放在全系统的任何目录,配置的时候,只要点点鼠标即可,但是用系统自带,我看很多同事,更加倾向于都放到一个 htdocs 文件夹,这绝对不是必须的,只是都放在一起的话,会一目了然,可以管理你到底配置了多少 VirtualHost,而 MAMP 环境里,不管你放在哪里,都会在 hosts 那栏列出来。

MAMP 自动使用 hosts 文件模拟域名指向,配置 VirtualHost 的时候,同步自动完成,而用系统原生的话,你不得不使用 IP 地址访问,或者自己手动维护 hosts 文件,这太拙劣了。此外 MAMP 提供了 DNS 服务,我一般都用 hosts,但是我想,DNS 也一定有其用途,比如,进行手机调试的时候,你可以指向 DNS 服务,从而使手机能连接到你本地的电脑,做本地调试,完全自己搞,这是很困难的。

使用的时候,要注意一些事项,比如我经常犯的一个错误,我会把 MAMP 里带的 PHP 二进制和系统自带的二进制混着用。

在绝大多数情况下,这都没有任何问题,但是一些特例问题上,有着很大不同。

比如,通过 PHP 脚本连接 MAMP 提供的 MySQL 时候,如果用系统自带的 PHP 二进制,你会发现死也连不上 MySQL,报错是找不到文件。会报错如“SQLSTATE[HY000] [2002] No such file or directory”,其实,MAMP 自己提供的 MySQL,一般在 PHP 里,都用 localhost 作为连接字符串,而这个时候,默认就会使用 unix socket 文件去连接 MySQL,刚才也说了,Mac 系统自己是没有安装 MySQL 的,所以,你指望自带的 PHP 知道去哪里找到 unix socket 文件,那根本不可能,因为 MAMP 提供的 MySQL,其 socket 文件也在沙盒里,不是一般缺省的那个 socket,所以,这里总是报找不到文件,这很诡异,一旦遇到,很难定位,我在同一个坑栽倒两次了。

解决方法,也无敌简单,就是给沙盒里地 PHP 二进制,做一个软链,放到/usr/local/bin 下面,比如命名为 php55,以后再执行需要连接数据库的脚本的时候,记得使用 php55 作为解释器来运行,就会顺畅。

另外,还有一个问题,也比较常见,就是 MAMP 这个软件包,竟然没有提供 memcached 扩展,还好,你去 Google 搜索,能搜到有人都编译好的版本,在 GitHub 上,直接下载对应的二进制文件就行了,拷贝到沙盒相应的 PHP 文件目录里。另外记得,这个扩展有依赖,需要用 brew 安装 memcached 和 libmemcached 才能使用,没装的话,表现一直是 apache 启动不了,或者启动,还说没有 memcached 扩展。