【问题标题】:How do I access files placed outside of the site root?如何访问放置在站点根目录之外的文件?
【发布时间】:2013-02-26 00:45:39
【问题描述】:

我整天都在为此煎熬。研究 SO,直到我的眼睛变得模糊......我需要知道:如何访问放置在站点根目录之外的文件?

背景:运行 Linux 的 Apache 2.0 专用服务器。

代码:PHP 和 MySQL

原因:我希望保护文件不会在浏览器中输入文件路径和文件名。

这不会那么难……但我的分裂脑袋却说不然。任何帮助将不胜感激。

【问题讨论】:

  • 您的问题将受益于一些澄清。你说过你正在使用 LAMP;您是否尝试从 ApachePHP 代码 访问这些文件?如果是后者(这似乎最有可能),那么 那个 代码是否在站点根目录内?
  • 如果是php文件访问另一个php文件(如索引文件加载应用文件),可以指定相对路径或绝对路径,也可以将应用文件夹添加到php的path环境中。不过,这会减慢其他事情的速度。
  • 我在这里可能错了..但是如果您按照提供的某些链接中的建议使用别名,我相当确定您仍然会遇到同样的问题,即人们能够输入 URL in. 使用 .htaccess 您可以阻止除了来自您自己的页面显示图像的请求之外的任何事情(以任何其他方式提供的图像将导致 403 错误)-corz.org/serv/tricks/htaccess.php;您还可以使用 PHP 脚本来提供文件。然后可以使用 PHP 来确定如何处理下载请求,这也意味着 img src 不仅仅是平面 *.jpg 链接
  • @pjmorse 我想从站点根目录中使用 PHP 访问文件,是的。我为没有澄清而道歉,但经过一天毫无结果的搜索和实验,我的大脑被击中了。
  • 必须有一种方法可以保护文件夹中的文件不被浏览器直接下载。否则,实习生上的每个支付网站都将倒闭。

标签: php mysql apache


【解决方案1】:

看看answers to this question,它们似乎在做或多或少相同的事情。

快速总结:readfile()file_get_contents() 是您所追求的。这个例子来自readfile()页面:

<?php
$file = 'monkey.gif';

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;
}
?>

我不建议允许使用用户输入设置 $file 变量!在响应中任意返回文件之前,请考虑文件名的来源。

【讨论】:

  • 我知道我已经很久没有发布这个问题了,但是上面的代码......它怎么知道它在站点的根文件夹之外查找?我想更好地了解它是如何工作的。
  • 只需为其提供一个根 URL(例如 /home/me/files/monkey.gif 而不仅仅是 monkey.gif)。
  • 这就像一个魅力!现在将其集成到网站中。很抱歉这么晚才回来,但直到今天我才退出这个项目。
  • 有用的是委婉地说。你是救生员。非常感谢!
【解决方案2】:

您是否尝试访问站点根目录之外的文件?那你可以看看这个link in stackoverflow。 这是 Apache 中的 official doc

否则您不必进行特殊处理以防止其他人访问站点根目录之外的文件。

【讨论】:

  • 实际上,我今天在 SO 上多次阅读该帖子。我读了另一个可以避免使用别名的地方,因此我对此完全感到困惑。我需要比我在网上阅读的更清晰的信息。每个问题的回答似乎只对那些已经知道如何做到这一点的人有意义,这让我没有进一步的进展。
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多