2011-05-30 74 views
2

我正在開發一個網站,用戶需要上傳一些非常大的文件。該網站是用PHP編寫的。在讀取主體之前拒絕HTTP請求

有些情況下,我想根據標題拒絕文件。理想情況下,我希望在收到標題後立即拒絕請求,而不必閱讀正文。如果標題足以說明該文件應該被拒絕,那麼沒有理由讀取200M文件。此外,當我接受請求時,我想定期保存接收到請求正文時讀取的字節數。

我知道這對PHP來說是不可能的,因爲整個HTTP請求都是在PHP掌握之前讀取的。我有什麼選擇?我從來沒有使用過Perl,但是我正在閱讀的是mod_perl可以訪問Apache API。有可能使用mod_perl來做到這一點?一個Apache模塊?

+0

看起來像你有一個這樣的副本: http://stackoverflow.com/questions/4558067/cancel-an-http-post-request-server-side#4558357 – rciq 2011-05-30 16:48:05

回答

0

使用標準的PHP處理程序幾乎是不可能的。直到它被解析,你纔會得到請求,不幸的是沒有辦法推遲這個請求。

編輯:我有使用公用文件上傳庫的流模式和Java的良好經驗。合併成Apache配置有點麻煩,但如果你正在談論200M文件,那麼值得節省帶寬。

0

如果您可以硬編碼拒絕文件的規則,則可以在.htaccess中使用mod_rewrite規則。使用%{HTTP:}條件:

RewriteCond %{HTTP:AcceptThisFile} False [NC] 
RewriteRule (...) 
0

有是可以與 「簡單」 的正則表達式中使用的ModSecurity。這在Apache2中執行,並在收到整個文件之前執行。您可以通過閱讀該文檔有點開始:

http://www.modsecurity.org/documentation/modsecurity-apache/2.5.5/modsecurity2-apache-reference.html

您可以保留默認的規則也因爲它們也將禁止許多無用的訪問,但它需要時間來消除這些實際上防止自己的網站規則與許多人一起工作,所以刪除所有這些默認規則可能是一個好主意。

相關問題