给 MAMP 框架安装额外的 apache 扩展 xsendfile

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
This entry was posted in PHP, mac开发 and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Verify Code   If you cannot see the CheckCode image,please refresh the page again!