2012-02-01 89 views
0

如何安裝X-Sendfile apache模塊以便MAMP可以使用它?在MAMP上安裝Apache模塊X-Sendfile

我跟着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

回答

4

naabster的答案是正確的,如果你的MAMP二進制是建立在相同的架構您的核心。你遇到的問題可能是MAMP不是使用相同的體系結構構建的 - 我使用XAMPP 1.7.3在這裏運行Lion(10.7.3),而我剛剛遇到了同樣的問題。

以下是我如何弄清楚我的系統出了什麼問題,以及我如何修復它。如果您的問題與我的問題相同,那麼您應該能夠隨時跟蹤並進行驗證。

首先,這裏的「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 

下面是我所採取的步驟,以追查問題並解決它:

  1. 找出其他(工作)模塊具有的,我新建的xsendfile模塊丟失的屬性。我選了mod_headers.so作爲例子。找到該信息的命令是'文件[文件名]'。我從cd'd到/應用/ 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。

  2. 檢查使用推薦的apxs build命令('sudo apxs -cia mod_xsendfile.c')構建的模塊支持的mach-o bundle類型和體系結構。因爲我們通過「-i」的APXS將安裝。所以到默認的Apache模塊目錄......在/ 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實例的工作。信任,但驗證,呃!

  3. 現在,我確定我理解了這個問題,讓我們重新構建.so,並在apxs命令行上強制使用適當的體系結構。要做到這一點,我只是添加兩個新的參數,W1(鏈接器標誌)和Wc(編譯器標誌)。所述-i裝置「安裝」(。所以移動到模塊目錄)和-a手段「激活」(添加或重新啓用在httpd.conf的LoadModule線)

    sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c 
    
  4. 再次檢查我們新的.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 
    

    您應該能夠火起來使用無論是UI或xamppfiles/bin目錄中找到apachectl腳本的服務器。

希望能幫到你。

另外,我做了一個相當不錯的盡職調查搜索,發現幾乎蹲在Goog尋找'XAMPP X-SendFile無法創建對象'。我在這裏找到的是你的問題,一旦我在搜索'XAMPP'後就消除了'XAMPP',而不是'MAMP'

我從'x'AMP堆棧開始,使用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

事實證明,我還運行了一個稍微過時的MAMP版本,所以我也必須升級它(因爲Apache版本不同)。雖然這很好。謝謝! – lakenen 2012-04-12 14:51:45

+0

樂意幫忙,很高興你啓動並運行:) – 2012-04-13 08:05:13

+0

我有和@lakenen一樣的問題。在升級MAMP之後,mod_xsendfile加載沒問題。我甚至沒有把它編譯到i386,只是使用「apxs -cia mod_xsendfile.c」工作正常。謝謝! – woran 2013-09-24 01:40:05

0

這爲我工作:

  1. 根據this默認OSX的Apache安裝mod_xsendfile服務器。
  2. 複製/usr/libexec/apache2/mod_xsendfile.so/Applications/MAMP/Library/modules/
  3. 編輯毫安httpd.conf文件並添加這一行:LoadModule xsendfile_module modules/mod_xsendfile.so
  4. 重啓毫安
+0

這正是我以前所做的,這產生了上述錯誤。 – lakenen 2012-03-16 13:54:20