MAMP 因为集成了 apache, php, mysql 等软件,在我们做 PHP 项目开发时,安装起来是非常方便的,所以我们公司都统一使用了 MAMP 作为开发机环境。但是MAMP也还是有其自身的局限性,当自带的扩展包不满足我们的需求要额外安装时,就比较困难了,而且由网上相关资料较少,探索研究了一段时间才终于搞定。现这里以 xsendfile 扩展为例,示范如何在 MAMP 中额外安装 apache 扩展。另外,你如果对 MAMP 中额外安装 PHP 扩展感兴趣,可以参见在文章mac下编译phpredis的c扩展给MAMP使用
首先,我们需要使用下面这个命令查看一下我们的 MAMP 中所带的 apache 的版本,在后续的操作都需要这个版本号
/Applications/MAMP/Library/bin/httpd -v Server version: Apache/2.2.29 (Unix) Server built: Oct 13 2014 17:25:37
可以看出我机器上的apache版本号为 2.2.29,接下来,我们需要准备一些 MAMP 发行包中丢弃的但是在编译扩展时需要的数据内容
# 1. 创建依赖的 build 目录 mkdir -p /Applications/MAMP/Library/build cd /Applications/MAMP/Library/build wget https://blog.yorkgu.me/uploads/config_vars.mk # 2. 生成缺失的文件 envvars echo > /Applications/MAMP/Library/bin/envvars # 3. 通过 brew 安装可能缺失的库 mkdir -p /usr/local/include brew install apr apr-util brew link --force apr apr-util # 4. 从网上下载对应的版本的 apache 源代码,并做一些初步处理,因为编译时需要 mkdir -p /Applications/MAMP/Library/include cd /Applications/MAMP/Library/include rm -rf apache2 # 如果这一步出错,可以使用浏览器下载然后放置到对应的目录里面 wget http://archive.apache.org/dist/httpd/httpd-2.2.29.tar.bz2 tar xvf httpd-2.2.29.tar.bz2 cd /Applications/MAMP/Library/include/httpd-2.2.29 CPP=/usr/bin/cpp CC=/usr/bin/cc ./configure --with-apr=/usr/local/bin/apr-1-config cd .. ln -s ./httpd-2.2.29/include apache2 ln -s ../os/unix/os.h apache2/os.h cp ./httpd-2.2.29/build/instdso.sh /Applications/MAMP/Library/build/instdso.sh # 5. 下载 xsendfile 扩展源码并进行编译 mkdir -p /Applications/MAMP/bin/apache2 cd /Applications/MAMP/bin/apache2 wget https://tn123.org/mod_xsendfile/mod_xsendfile.c cd /Applications/MAMP/bin/apache2 /Applications/MAMP/Library/bin/apxs -cia mod_xsendfile.c
如果一切顺利,那么你就会在路径/Applications/MAMP/Library/modules/mod_xsendfile.so
中找到编译好的so文件
关于 X-Sendfile 的配置以及使用,请参考官方文档
如果你碰到类似下面这样的错误,可以通过做一个软链接来进行解决
/usr/share/apr-1/build-1/libtool: line 8962: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.11.xctoolchain/usr/bin/cc: No such file or directory # 该错误的含义是指 libtool 所绑定的 c 语言编译器 cc 所在的目录已经不存在了,这个和 mac 操作系统升级有关系 # 解决方法为执行下面的命令,做一个软链接 ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.11.xctoolchain