2011-08-08 38 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脚本读取文件,放入适当的标题,然后将文件传输到用户的计算机。

当然,向用户显示文件列表以及将文件传送给用户的脚本的脚本必须至少具有读取存储路径中文件的权限。

祝你好运!

相关问题