
我們有一些無法公開存取的大檔案(1-8GB)。目前,我們透過 PHP 腳本提供它們,該腳本以 1MB 區塊的形式緩衝檔案並將其寫入輸出。它對 CPU 的消耗令人難以置信,並且當只有少量下載處於活動狀態時會降低伺服器速度。我們希望將檔案傳輸工作轉移到 Apache 或更有效的方法。我們正在使用cookie 身份驗證。除非有某種方法透過現有的 PHP 會話 cookie 來驗證 FTP 會話,否則 FTP 下載將會被淘汰。
理想情況下,我們希望可以使用 PHP 來隱藏文件的鏈接,同時將文件傳輸工作傳遞給 Apache,毫無疑問,Apache 在 HTTP 文件傳輸方面比 PHP 高效得多。我們也希望能夠恢復下載。
任何幫助表示讚賞。
答案1
X-Sendfile 是專門為此類操作而製作的。您可以在以下位置閱讀相關內容:http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/
答案2
mod_auth_tkt 看起來很有趣。如果您的 Apache/PHP 設定託管在 UNIX 上,那麼這是一個技術含量較低的解決方案:
將下載內容儲存在不可透過 Web 存取的目錄中,然後使用 PHP 腳本在其中建立唯一的符號連結。然後您可以在指定的時間段(例如 24 小時後)後刪除符號連結。
這是一個例子。假設您的檔案儲存在 /private 中並受 .htaccess 檔案保護。您還有一個 /public 目錄,運行 Apache 的使用者可以對其進行寫入。
虛擬程式碼:
- 使用者前往下載頁面
- PHP 腳本產生一個唯一的下載 ID 用作符號連結檔案名稱(範例:79467404-7585-11df-9ead-0022190d59d2)
- PHP 腳本建立從 /public/79467404-7585-11df-9ead-0022190d59d2 到 /private/file1 的符號鏈接
- PHP 腳本將使用者重新導向到http://example.com/public/79467404-7585-11df-9ead-0022190d59d2允許檔案下載
然後,您可以使用 cronjob 執行“find /public -type l -mtime +24 -exec rm {} \;”或類似刪除過期符號連結的東西。 (注意:使用 find 刪除檔案時要非常小心。)
此解決方案不會阻止某人在接下來的 24 小時內共享鏈接,因此它可能不適合重要的情況。但它不需要任何額外的 Apache 模組等。
答案3
這個伺服器故障問題可能有關係。或者,你可以使用類似的東西mod_auth_tkt。
答案4
我使用了一個名為 Net 2 FTP 的服務,它是一個純 html/PHP 介面來在線上存取 FTP 帳戶。您可以相對輕鬆地下載和安裝軟體,並且由於網站很小,因此沒有任何開銷。
這個軟體非常有用且易於使用,聽起來它非常適合您的使用。
主頁是http://www.net2ftp.com/,它是完全免費的軟體。