我整天都在为此煎熬。研究 SO,直到我的眼睛变得模糊......我需要知道:如何访问放置在站点根目录之外的文件?
背景:运行 Linux 的 Apache 2.0 专用服务器。
代码:PHP 和 MySQL
原因:我希望保护文件不会在浏览器中输入文件路径和文件名。
这不会那么困难......但我的分裂头说不然。任何帮助将不胜感激。
看看这个问题的答案,它们似乎或多或少地在做同样的事情。
快速总结: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
使用用户输入设置变量!在响应中任意返回文件之前,请考虑文件名的来源。
您是否尝试访问站点根目录之外的文件?然后你可以在 stackoverflow中查看这个链接。这是 Apache 的官方文档。
否则,您不必进行特殊处理以防止其他人访问站点根目录之外的文件。