2013-02-11 91 views
1

我還有一個問題:讀取的文件只能通過PHP

當我寫localhost/folder/file.txt到瀏覽器中,它會打開並顯示file.txt的內容。

但是我想讓這個文件只能被PHP讀取,而不能被瀏覽器讀取。我試了一下chmod,但它不起作用。有可能這樣做嗎?

謝謝

+1

最可靠的方法是把它放在web根目錄之外。 – 2013-02-11 10:50:10

回答

3

你可以拒絕訪問.txt擴展。

.htaccess

# prevent viewing of a specific file 
<Files file.txt> 
order allow,deny 
deny from all 
</Files> 

# multiple file types 
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh|txt)$"> 
Order Allow,Deny 
Deny from all 
</FilesMatch> 
+1

把它放在web根目錄之外還是比較穩固的, - 服務器配置中的'AllowOverride'可能會改變並渲染這個模擬 – 2013-02-11 10:51:24

+0

這不是真的,有些提供程序不允許你訪問... – 2013-02-11 10:52:13

+0

我在說' AllowOverride'在中央服務器配置中發生變化,這會使文件不受保護。這不應該發生,但它可以。 (不是我downvote雖然,有時這是唯一的方法) – 2013-02-11 10:54:35

0

你可以把文本文件放到一個mySQL數據庫中作爲BLOB或TEXT。所以不可能通過瀏覽器閱讀,只能通過查詢(通過php)。

+1

這是一個非常原始的建議,但可以說有更簡單的方法。 :) – 2013-02-11 10:50:31

+0

更好的方法,爲了你想要的目的,你不想這樣做。 – jeroenvisser101 2013-02-11 10:53:00

5

寫入文件外部 web根目錄,那麼Web服務器將不會提供給客戶端。 (PHP沒有要求在文檔根目錄下讀取它)。

其他選項包括:

  • 使用你的網站服務器認證/ AuthZ的系統,以確保文件(不推薦這個問題,因爲它更可能是配置錯誤將打破安全則是文件將被放置在錯誤的地方)
  • 使用數據庫,而不是
0

簡單的解決方案:

$s=file_get_contents('test.txt'); 

如果文件中有一些代碼來執行,可以eval它。

eval(file_get_contents('test.txt')); 
-3

你有沒有試過chmod到660?

我剛剛嘗試過使用我的Web服務器,它不可用。

+0

由於PHP腳本通常以與web服務器相同的用戶身份運行,因此if您設置權限以便服務器無法讀取它,那麼PHP腳本也將無法讀取它。 – Quentin 2013-02-11 11:54:34

+1

A「你有沒有試過...?」 - 在沒有解釋它爲什麼會起作用的情況下回答,可能會造成更多傷害而不是獲益。如果你有一個建議,請爲什麼它會起作用而不是讓讀者感到困惑(在這種情況下,它不會像@Quentin解釋的那樣)。 – Rein 2016-10-24 13:39:26