【问题标题】:How to URL Link to file outside root directory如何 URL 链接到根目录外的文件
【发布时间】:2011-10-22 20:16:31
【问题描述】:

所以我有一个文件上传器,它允许人们将文件上传到服务器,然后通过 URL 下载它们。

我想将上传的文件存储在根目录之外。 (在名为 Uploads 的文件夹中从根目录向上一级)

代码sn-p

$server = "http://www.mysite.com";

$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$size = $_FILES['file']['size'];

$destination = '../uploads/'. $random;
mkdir($destination);
move_uploaded_file($temp, $destination."/".$name);

$final = $server."/".$destination."/".$name;

这...

$destination = 'Uploads/' . $random ;

不起作用(找不到文件错误)。 ($random 是顺便定义的..)

【问题讨论】:

  • 使用未过滤的$name 并不能保证文件保留在 docroot 之外。还有为什么Upload 目录在你的第二个例子中是大写的,但不是在第一个例子中?
  • 您不能直接超链接到 docroot 之外的文件。您需要 PHP 通过 file_get_contents() 或类似方式读取文件的内容,并将其回显到浏览器,前面是基于文件扩展名的正确 content-type 标头。
  • 您可以使用 IDENT(自动增量)字段在数据库上创建表。然后将文件名存储在表上并将文件重命名为分配给存储文件名的行的标识号。我的东西是最优雅的解决方案。您还可以在行中存储类型和大小,并在用户下载文件时通知客户端导航器。
  • @Mario:大写只是我粘贴的错误。
  • @Michael:这样做是否正确... $yourfile = file_get_contents("/var/www/vhosts/domain.com/Upload/file.txt") 然后在其他地方回显?

标签: php upload


【解决方案1】:

简单的答案是在 web 根目录中创建一个指向 ../Uploads 的符号链接:

ln -s ../uploads Uploads

当然,这使得上传目录可以通过网络访问。如果您想阻止上传目录可通过网络访问,请不要创建符号链接,而是添加一个重写规则,将请求重定向到 /Uploads/ 到将通过数据的 php 脚本,可能仅在检查某些条件后(如用户已登录)。

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多