2010-02-26 81 views
10

我有一個腳本,只允許授權用戶上傳文件到某個文件夾。如何防止使用php公開下載文件?

但是我不知道如何阻止人們無需登錄自由下載。

我需要在PHP解決方案。

我用Google搜索周圍,但沒有直截了當至今。

目前在我的文檔根目錄我有一個文件夾名爲admin和一個叫做管理裏面上傳子文件夾。所以只有管理角色才能上傳。編輯和管理員都可以下載。在這種情況下我該怎麼辦?

請指教。

回答

13

把文件放在公共目錄根目錄外,或配置您的服務器不提供文件服務。只要您的服務器能夠愉快地使用有效的URL提供所有服務,您就無法用PHP來做到這一點。


如果你的文件是在/public_html/文件夾,把它們從該文件夾中,並放置在如/secret_files/,所以你的目錄結構看起來是這樣的:

public_html/ 
    index.html 
    admin/ 
     admin_index.php 
secret_files/ 
    my_secret_file.txt 

的Web服務器配置爲僅在/public_html/目錄文件服務解決方案,所以沒有人將有機會獲得目錄(技術術語上述)它。

爲了使仍然有人來下載這些文件,請執行克萊圖斯建議,並使用readfile通過PHP腳本「人工服務」的文件。 PHP仍然可以訪問文件系統的這些其他部分,因此您可以將其用作網守。

+0

是public webroot public_html? wat關於httpdocs? –

+0

@keisimone查看更新的答案。 – deceze

+0

謝謝。這更清楚。你們很酷。 –

5

回答如何使用PHP密碼保護的問題: This應該解決您的問題。

+0

有人找到密碼? – RageZ

+4

如果他們找到密碼,很可能他們有權訪問您的FTP,所以無論如何你都會被搞砸。 – twodayslate

9

不要將文件存儲在文檔根目錄下的目錄中。

而是將它們移動到其他地方,然後PHP腳本可以通過編程確定是否有人可以下載它們,然後使用readfile()或類似的東西將它們流式傳輸給用戶。

您還可以將Web服務器配置爲不從這個目錄中的文件服務,但那麼你需要PHP反正爲他們服務。它更簡潔,不要將它們放在文檔根目錄下。

+0

嗨cletus,我沒有強大的編程,所以我需要問你更多的細節 1)哪裏是別的地方?目前在我的文檔根目錄中,我有一個名爲admin的文件夾和一個名爲uploads的子文件夾。所以只有管理角色才能上傳。編輯和管理員都可以下載。在這種情況下我該怎麼辦? –

+1

@keisimone(1)將它們存儲在文檔根目錄之上,它可能像htdocs或public_html一樣。 – alex

+0

@alex是的,我所有的文件都已經在public_html :)所以它的public_html> admin>上傳 –