以前,我使用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扩展。