我有一個腳本爲每個在文件夾/files
中訪問的文件執行的CMS。使用PHP下載文件,跟蹤,授權,緩存,MIME類型
我設置這個了一個在/files/.htaccess
RewriteRule ^(.*) ../file_tracker?path=/$1
有兩件事情RewriteRule
的file_tracker.php
腳本應該做的:
- 跟蹤:保留日誌多少次一個文件被訪問,最後一次被訪問。
- 授權:例如
/files/secure
中的文件需要登錄會話。
當你有這樣一個腳本,你需要做更多的工作,如:
- 返回如果文件不存在404個狀態碼 - 需要
file_exists
檢查 - 輸出正確的MIME類型頭文件 - 如果允許任何文件類型被提供,這是PHP中的惡夢
- 輸出合理的緩存頭文件 - 自定義電子標籤?
我想,因爲有些頁面有很多文件的這個腳本是儘可能快,100ms的開銷已經太多了。現在我正在考慮一個簡單的日誌來進行跟蹤,一個計劃任務將執行批量更新。授權將更加資源密集,但我想我無法避免這種情況。最後一部分我希望Apache能夠做到,因爲它看起來非常擅長:正確的標題,用於緩存的電子標籤以及所有的幻想。
我很確定我不能成爲這個問題唯一的問題。有什麼建議麼?
UPD:我沒有代碼來顯示,因爲沒有相關的代碼。我可以實現的事情是如此微不足道,甚至不值得發佈。這是一個先進的話題。 '使用header()
'不是我正在尋找的那種建議。
將是完美的解決方案,但它不是在默認情況下大多數主機啓用,所以我不能依賴它。
這是一個相對簡單的任務,你需要自己寫一下,如果遇到困難,可以提出具體問題。頭文件都是關於['header()'](http://php.net/manual/en/function.header.php)的函數,並且需要一個正確的MIME類型,你需要一個MIME類型的查找表 - > file擴展關係。如果可用['finfo_file()'](http://php.net/manual/en/function.finfo-file.php)可以幫助解決這個問題。 – DaveRandom 2012-01-31 15:44:23
當您考慮到大多數文件需要花費很多時間才能下載時,100毫秒的處理開銷是沒有意義的。 50,000ms的下載時間爲100ms = 0.2%的開銷。 – 2012-01-31 15:48:19
當你使用'X-Sendfile時:'Apache應該處理實際的文件下載以及頭文件。 (在PHP用戶空間中正確處理字節範圍或條件http請求有點費力) – mario 2012-01-31 15:56:48