2012-01-03 71 views
1

我一直強烈建議使用XSendfile,因爲我們服務的服務器上的文件非常大。服務器正在運行Cpanel。之前我們使用的是直接下載的腳本,在某些瀏覽器中也不能很好地工作。希望用XSendfile一箭雙鵰。XSendfile無法正常工作 - PHP,Apache,Cpanel

好吧,我們的主機在我們的服務器上啓用了Xsendfile。我寫了一個快速測試腳本:

$file = "/home/deli/central/testfile.doc"; 
header("X-Sendfile: $file"); 
header("Content-type: application/octet-stream"); 
header('Content-Disposition: attachment; filename="' . basename($file) . '"'); 
exit; 

當我運行這個,我得到下載提示。但發送的文件始終爲0kb。

有點研究,似乎你需要在apache配置文件或htaccess文件中設置各種東西。我還被告知將它添加到apache配置文件並不是一個好主意,否則它可能會在更新時被覆蓋。我寧願在htaccess中使用它,因爲我沒有直接訪問apache配置,我寧願使用htaccess進行控制。

當然,如果我能得到它的工作。

所以,我已經添加了以下到htaccess文件:

XSendFile上 XSendFilePath /家庭/熟食店/中央 XSendFileAllowAbove在

(相對路徑從腳本到中央文件目錄是../../deli/central)

如果我將這些行添加到htaccess中,並將其放入public_html目錄(與測試腳本相同的目錄),然後運行測試腳本時, 500錯誤。快速瀏覽一下錯誤日誌顯示:

/home/north/public_html/.htaccess:XSendFilePath這裏不允許

誰能賜教,以什麼我可能是做錯了?

ps - 我剛剛讀到它在apache配置中執行效率高很多,因此服務器無需抓取並加載所有htaccess文件。不知道這是否屬實。

幫助是非常讚賞,這是一個位在該項目:)

PS一個攪局者的我忘了提 - 如果我把在一條直線力下載到腳本,使用相同的$文件路徑,文件下載就好了。所以這條路似乎是正確的。

+0

您正嘗試從'/ home/deli/...'提供文件,但您的'.htaccess'文件位於不同路徑'/ home/north/...'中。你確定正確的用戶(運行Apache進程)可以訪問'/ home/deli'路徑嗎? – leftclickben 2013-02-06 03:36:41

回答

1

如果您獲得0個字節,則可能需要禁用輸出壓縮需求,請參閱here for more。對於XSendFilePath不允許在這裏錯誤是您的.htaccess語法問題。如果可以,請手動檢查以確保它位於正確的位置per the documentation

+0

嗨,感謝您的回答。好吧,我已經要求我們的服務器管理員將以下內容添加到apache配置文件 - XSendFile XSendFileAllowAbove On - 他們說他們已經這樣做了,但無論我嘗試什麼,我仍然接收零字節文件。我也嘗試將這兩行添加到根.htaccess文件中。在該文件中,我有以下 - 選項-Indexes 的ErrorDocument 404 /index.html 的ErrorDocument 403 /index.html XSendFile在 XSendFileAllowAbove在 – 2012-01-08 10:23:49

+0

..ps也,我已經在.htaccess使用XSendFilePath嘗試,但這樣也給我一個500錯誤。 – 2012-01-08 10:35:58

+0

嗨 - 沒有必要在這一個進一步的幫助,現在整理出來。謝謝你的幫助。 – 2012-01-09 05:01:10

3

我希望這會幫助別人......

我是有這樣的問題:當和任何 - I解決> 0字節

這從虛擬主機部

<VirtualHost *:80> 

    DocumentRoot "/var/{{ app_name }}/web" 
    ServerName {{ app_name }}.dev 

    # here was the problem 
    XSendFile On 
    XSendFilePath /var/1000italy/data/offline 

    <Directory "/var/{{ app_name }}/web"> 
     allow from all 
     Options -Indexes 
     AllowOverride All 
    </Directory> 

    ErrorLog /var/log/apache2/{{ app_name }}_error.log 
    CustomLog /var/log/apache2/{{ app_name }}_access.log combined 

</VirtualHost> 

移動

XSendFile On 
XSendFilePath /var/1000italy/data/offline 

到目錄節

<VirtualHost *:80> 

    DocumentRoot "/var/{{ app_name }}/web" 
    ServerName {{ app_name }}.dev 

    <Directory "/var/{{ app_name }}/web"> 
     allow from all 
     Options -Indexes 
     AllowOverride All 

     # HERE EVERYTHING WORKS FINE 
     XSendFile On 
     XSendFilePath /var/1000italy/data/offline 
    </Directory> 

    ErrorLog /var/log/apache2/{{ app_name }}_error.log 
    CustomLog /var/log/apache2/{{ app_name }}_access.log combined 

</VirtualHost> 

Ciao

+1

目錄部分也開始在我的服務器上工作。謝謝 – Sergey 2015-06-03 06:24:35