【发布时间】: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") 然后在其他地方回显?