2012-04-24 38 views
1

我允許我的網站用戶上傳圖像,然後使用PHP腳本提供圖像。但是,這明顯比靜態鏈接慢。用PHP提供圖像速度非常慢

我使用PHP來提供圖像的原因是因爲我試圖阻止人們能夠訪問存儲圖像的文件夾。

我應該使用.htaccess文件嗎?我也在考慮httpd中的ALIAS,但不知道如何使用它或者它是否合適 - 我可以使用這個參考根文件夾之外的文件夾嗎?

任何幫助將不勝感激。

感謝

header("Content-type: " . filetype($file) . "\n"); header("Content-Disposition: inline; filename=\"{$image}\"\n"); header("Content-Length: ".(string)(filesize($file))); @readfile($file);

+0

慢多少?它不應該太慢。一個小技巧就是在開始的時候開始打開文件,在執行PHP時,硬盤給HDD一小部分時間將其移動到緩存中,導致更多文件在緩存中,並且更快讀。 :) – DanRedux 2012-04-24 20:24:29

+0

發佈您的代碼。 「速度很慢」不足以幫助我們排除故障 – 2012-04-24 20:24:49

+0

絕對使用'readfile()'來讀取文件,這有很大幫助。但是,是的,htaccess有很多幫助。如果你所做的只是直接將它傳遞給瀏覽器,就不要使用'file_get_contents'。 – 2012-04-24 20:24:50

回答

3

使用與單行.htaccess文件:

​​

然後,用戶可以訪問該文件夾,但不能看到任何東西。

另外,添加一個名爲index.html文件,但留空(或包括「您可能沒有查看此頁」消息)

4

使用Options -Indexes一個Directory標籤內禁用索引。但是,你應該走得比這更遠一步。

對於安全性和一般的文件系統衛生,您應該將您的資產(圖像等)保存在獨立於代碼的目錄中。

然後,您可以添加到您的Apache配置:

<Directory /directory/where/assets/are> 
    Order Allow,Deny 
    Allow from all 
    Options None 
    AllowOverride None 
    <IfModule mod_php5.c> 
     RemoveHandler .php 
     RemoveType .php 
     php_flag engine off 
    </IfModule> 
</Directory> 

這將禁用任何類型的文件執行的在資產目錄以及禁用文件列表的腳本,但允許任何人下載這些文件。以這種方式保護帶有用戶上傳文件的目錄很重要,因爲它們可能會上傳惡意PHP腳本,然後您可以託管它們。

+0

爲此歡呼 - 我想我現在應該在四處閱讀後提供靜態圖像,因爲php太慢了。我將隨機生成它們的文件名並存儲在上面提到的這個目錄中。你認爲這會起作用嗎? – tommyd456 2012-04-24 22:48:05