使用PHP下载文档根目录外的文件

时间:2014-02-13 21:21:32

标签: get php

我正在尝试使用readfile()下载文件;在PHP但我遇到了麻烦,这是我的代码:

<?php
$getdir = $_GET['dir'];
$getdoctype = $_GET['doctype'];
$getfile = $_GET['filename'];
$dir = "/var/www/uploads/$getdir/$getdoctype/";

$type = mime_content_type( $dir . '/' . $getfile );
$contents = file_get_contents($dir . '/' . $getfile);

if (file_exists($getfile)) {
header('Content-Type: ' . $type);
header('Content-Disposition: attachment;filename=' . $getfile);
readfile($getfile);
}
else{
echo "File Not Found";
}
?>

我做错了什么?我想下载存储在$ getfile变量中的文件。我想使用所有文件类型和所有文件大小,这就是为什么我这样做。

我点击文件时遇到的错误是:“找不到文件”,根据我的代码。但确实存在。

另请注意,托管这些文件的网站已启用SSL

2 个答案:

答案 0 :(得分:2)

您应该尝试替换此代码:

file_exists($getfile) =&gt; file_exists($dir . '/' . $getfile)

readfile($getfile); =&gt; readfile($dir . '/' . $getfile);

但是使用$_GET参数从文件系统加载文件是非常危险的,不要在公共网站上使用此代码。

答案 1 :(得分:1)

您没有正确指向该文件。

<?php
$getdir = $_GET['dir'];
$getdoctype = $_GET['doctype'];
$getfile = $_GET['filename'];
$dir = "/var/www/uploads/$getdir/$getdoctype/";

if (file_exists($dir . $getfile)) {
$type = mime_content_type( $dir . $getfile );
header('Content-Type: ' . $type);
header('Content-Disposition: attachment;filename=' . $getfile);
readfile($dir . $getfile);
}
else{
echo "File Not Found";
}
?>