2013-02-11 80 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