2012-01-31 89 views
1

我有一個腳本爲每個在文件夾/files中訪問的文件執行的CMS。使用PHP下載文件,跟蹤,授權,緩存,MIME類型

我設置這個了一個在/files/.htaccess

RewriteRule ^(.*) ../file_tracker?path=/$1

有兩件事情RewriteRulefile_tracker.php腳本應該做的:

  • 跟蹤:保留日誌多少次一個文件被訪問,最後一次被訪問。
  • 授權:例如/files/secure中的文件需要登錄會話。

當你有這樣一個腳本,你需要做更多的工作,如:

  • 返回如果文件不存在404個狀態碼 - 需要file_exists檢查
  • 輸出正確的MIME類型頭文件 - 如果允許任何文件類型被提供,這是PHP中的惡夢
  • 輸出合理的緩存頭文件 - 自定義電子標籤?

我想,因爲有些頁面有很多文件的這個腳本是儘可能快,100ms的開銷已經太多了。現在我正在考慮一個簡單的日誌來進行跟蹤,一個計劃任務將執行批量更新。授權將更加資源密集,但我想我無法避免這種情況。最後一部分我希望Apache能夠做到,因爲它看起來非常擅長:正確的標題,用於緩存的電子標籤以及所有的幻想。

我很確定我不能成爲這個問題唯一的問題。有什麼建議麼?


UPD:我沒有代碼來顯示,因爲沒有相關的代碼。我可以實現的事情是如此微不足道,甚至不值得發佈。這是一個先進的話題。 '使用header()'不是我正在尋找的那種建議。


將是完美的解決方案,但它不是在默認情況下大多數主機啓用,所以我不能依賴它。

+1

這是一個相對簡單的任務,你需要自己寫一下,如果遇到困難,可以提出具體問題。頭文件都是關於['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

+1

當您考慮到大多數文件需要花費很多時間才能下載時,100毫秒的處理開銷是沒有意義的。 50,000ms的下載時間爲100ms = 0.2%的開銷。 – 2012-01-31 15:48:19

+1

當你使用'X-Sendfile時:'Apache應該處理實際的文件下載以及頭文件。 (在PHP用戶空間中正確處理字節範圍或條件http請求有點費力) – mario 2012-01-31 15:56:48

回答

0

我想這只是歸結爲訪問PHP中的日誌記錄。授權是一個不同的問題。我會解決這個問題,並創建一個新的問題。