2011-08-08 76 views
13

可以說我有一個純文本文件example.txt,我有一個PHP腳本我的Web服務器上readfile.php允許腳本讀取文件,但防止用戶查看文件直接

我希望能夠做的就是防止用戶鍵入http://www.example.com/example.txt,並在文本文件中直接尋找,但我還是希望人們能夠加載http://www.example.com/readfile.php從文件example.txt讀取和做一些事情與它(可能顯示文件的內容)。

而且,如果可以做到這一點,什麼是做到這一點的最好方法是什麼?

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html –

+0

你的意思是「...希望人們能夠加載http://www.example.com/readfile.php」不是「readfile.txt」。 –

回答

14

是的,這很容易做到。

主要有兩種方式來訪問example.txt阻止用戶。首先是把它放在一個文件夾中的Web文件夾(通常稱爲wwwpublic_html)之外,第二個是把一個.htaccess文件的文件夾中與塊共訪問文件一下example.txt腳本。該.htaccess看起來像

<files "example.txt"> 
deny from all 
</files> 

但你可以改變example.txt爲類似*.txt如果你想阻止該文件夾中的所有文件.txt

然後你可以使用file_get_contents()readfile.php來獲取文本文件的內容,或者如果你只是要輸出的文件,你可以使用readfile

+0

+1將文件放入網絡目錄並使用.htaccess。謝謝。 – mtahmed

+0

@mtahmed不客氣:)謝謝接受! – Paulpro

+0

我添加了.htaccess文件,但是當我嘗試調用file_get_contents()時出現錯誤::未能打開流:HTTP請求失敗! HTTP/1.1 403禁止。我必須更改任何權限的PHP來訪問文件?我也嘗試過使用cUrl而沒有運氣。 –

8

只需將文件存儲在你不想的根目錄外界公開訪問

/home 
    example.txt 
    /www 
     readfile.php 

如果/home/www/是您的公共文件夾的根目錄,它上面的任何文件不是通過Web服務器訪問。儘管如此,readfile.php仍然可以在../example.txt上完美地訪問該文件。

+0

WOW ...爲什麼我沒有想到這個?謝謝! – mtahmed

0

你可以把公用文件夾的文件「將example.txt」之外,如果需要將文件存儲在Web根目錄,然後把該文件的文件夾中,並從readfile.php像$content = file_get_contents("../example.txt");

1

閱讀拒絕訪問該文件夾。如果您使用的是Apache,使該文件夾,然後鍵入.htaccess文件中deny from all

0

您可以調用文件中像這樣和人沒有看到文件名:

<?php 
$file = 'example.txt'; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

(來源:PHP .NET)

會爲你工作?

1

我已經做了類似的東西在文件中包含極爲敏感信息,我只希望經過驗證的用戶能夠通過HTTPS連接檢索文件。

我所做的是這樣的:

我把文件是什麼樣的網絡服務器(Apache的,對我來說)可以看到的範圍之外的目錄路徑。因此,沒有可能導致文件被Web服務器直接提供的URL。然後,我創建了一個腳本,允許用戶登錄,單擊他們想要的文件,然後PHP腳本讀取文件,放入適當的標題,然後將文件傳輸到用戶的計算機。

當然,向用戶顯示文件列表以及將文件傳送給用戶的腳本的腳本必須至少具有讀取存儲路徑中文件的權限。

祝你好運!

相關問題