如何安装X-Sendfile apache模块以便MAMP可以使用它?
我已经跟着these instructions安装了X-Sendfile,但是它没有用(似乎只是为默认的apache安装安装了它)。我还尝试手动将/usr/libexec/apache2/mod_xsendfile.so
复制到/Applications/MAMP/Library/modules/
,但在重新启动Apache时出现以下错误:
Cannot load /Applications/MAMP/Library/modules/mod_xsendfile.so into server: cannot create object file image or add library
答案 0 :(得分:4)
以下是我如何弄清楚我的系统出了什么问题,以及我是如何修复它的。如果您的问题与我的问题相同,那么您应该能够随时跟进并进行验证。
首先,这是'uname -a'的输出,以显示我正在运行的内容:
Darwin Tads-Mac-Pro.local 11.3.0 Darwin Kernel Version 11.3.0:
Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
以下是我采取的跟踪问题并解决问题的步骤:
找出其他(工作)模块的属性,即我新建的xsendfile模块丢失了。我选择了mod_headers.so作为例子。查找该信息的命令是“file [filename] ”。我正在从终端cd'd运行到/ Applications / XAMPP / xamppfiles / modules目录:
file mod_headers.so
mod_headers.so: Mach-O universal binary with 2 architectures
mod_headers.so (for architecture i386): Mach-O bundle i386
mod_headers.so (for architecture ppc): Mach-O bundle ppc
如您所见,XAMPP提供了支持i386和ppc架构的通用二进制文件。但是,因为Lion内核正在运行x86_64,所以我使用apxs 构建的所有内容除非我告诉它否则将是x86_64。
检查使用推荐的apxs build命令('sudo apxs -cia mod_xsendfile.c')构建的模块支持的mach-o bundle类型和体系结构。因为我们传递'-i',apxs会将.so安装到默认的apache模块dir ... / usr / libexec / apache2 ...
file /usr/libexec/apache2/mod_xsendfile.so
/usr/libexec/apache2/mod_xsendfile.so: Mach-O 64-bit bundle x86_64
只是仔细检查这是否是问题,你也可以查看httpd(apache)二进制文件:
file /Applications/XAMPP/xamppfiles/bin/httpd
/Applications/XAMPP/xamppfiles/bin/httpd: Mach-O universal binary with 2 architectures
/Applications/XAMPP/xamppfiles/bin/httpd (for architecture i386): Mach-O executable i386
/Applications/XAMPP/xamppfiles/bin/httpd (for architecture ppc): Mach-O executable ppc
现在,对于没有x86_64映像构建的apache实例,这肯定不行。相信,但要验证,呃!
现在我确定我理解了这个问题,让我们在apxs命令行上强制使用适当的架构来重新构建.so。要做到这一点,我只是添加两个新的参数,Wl(链接器标志)和Wc(编译器标志)。 -i表示'install'(将.so移动到modules目录中),-a表示'activate'(在httpd.conf中添加或重新启用LoadModule行)
sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c
重新检查我们的新.so是否支持与安装的Apache相匹配的架构(i386,而不是x86_64)
file /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so
/Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so: Mach-O bundle i386
真棒。现在,将此火鸡复制到XAMPP安装目录中:
sudo cp /usr/libexec/apache2/mod_xsendfile.so /Applications/XAMPP/xamppfiles/modules/
将LoadModule行添加到/Applications/XAMPP/xamppfiles/etc/httpd.conf。
LoadModule xsendfile_module modules/mod_xsendfile.so
您应该能够使用xamppfiles / bin目录中的UI或apachectl脚本启动服务器。
希望对你有所帮助。
另外,我做了相当不错的尽职调查,发现只是在Goog中寻找'XAMPP X-SendFile无法创建对象'。我找到的是你的问题,一旦我消除'XAMPP',因为我在寻找'XAMPP',而不是'MAMP'
我开始使用'x'AMP堆栈,比如10年前使用LAMPP,然后是WAMPP,但ApacheFriends的人现在称他们的XAMPP为他们支持的所有平台。我更喜欢使用他们,因为我知道如果我必须在Windows服务器上安装,我可以下载我现在使用的相同软件包但是对于Windows而言我可以期望找到所有相同的服务器而没有(太多)意外。
因此,只是(非常)彻底,更容易发现这些类型问题的另一种方法是通过Console.app。打开它,过滤org.apache.httpd,你会看到类似的东西:
httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load
/usr/libexec/apache2/mod_xsendfile.so into server:
dlopen(/usr/libexec/apache2/mod_xsendfile.so, 10): no suitable image found.
Did find:\n\t/usr/libexec/apache2/mod_xsendfile.so: mach-o, but wrong architecture
您也可以在手动启动Apache服务器时从命令行获取该信息:
sudo apachectl -E /tmp/foo.txt -k start; tail -f /tmp/foo.txt
答案 1 :(得分:0)
这对我有用:
/usr/libexec/apache2/mod_xsendfile.so
复制到/Applications/MAMP/Library/modules/
LoadModule xsendfile_module modules/mod_xsendfile.so