文件存在于php下载中

时间:2014-09-11 16:16:46

标签: php download

我下载文件但我想要。 IF文件存在于驱动器C我可以下载, ELSE IF文件存在自动可以从驱动器D下载文件。否则"找不到文件" 我很困惑:(

这是我的quoute脚本

$id = $_GET['id'];

$query  = "SELECT * FROM upload WHERE id = '$id'";
$jl  = mysql_query($query);
$data = mysql_fetch_array($jl);

header("Content-Disposition: attachment; filename=".$data['name']);

header("Content-length: ".$data['size']);

header("Content-type: ".$data['type']);

$filename = $data['name'];

if (file_exists($filename)) {
$fp  = fopen("d:/result/".$data['name'], 'r');
$content = fread($fp, filesize('d:/result/'.$data['name']));
fclose($fp);
} 

else if (file_exists($filename))   {
$fp  = fopen("c:/result/".$data['name'], 'r');
$content = fread($fp, filesize('c:/result/'.$data['name']));
fclose($fp);
}

else  {
echo "File Not Found";
}

// show file download 
echo $content;

exit;

2 个答案:

答案 0 :(得分:0)

您的代码是倒退的。您已经输出了content标题,因此如果该文件不存在,您的用户将下载一个文件,其内容为"文件未找到"。当他们双击他们的pdf / word /任何文件并且#34;文件被损坏时,这只会让他们感到困惑"错误。

您的代码应该更像:

$c_source = 'C:/...';
$d_source = 'D:/...';

if (is_readable($c_source)) {
    header(...);   // <--do this only if you found a file
    readfile($c_source);
} else if (is_readable($d_source)) {
    header(...); // do this only if you found a file
    readfile($d_source);
} else {
    die("File not found");
}

答案 1 :(得分:0)

您可以指定数组中的路径列表。

$paths ['c:/result/', 'd:/result/];

然后你循环遍历这些路径:

foreach($paths as $path){
    if(file_exists($path.$data['name'])){
        print file_get_contents($path.$data['name']);
    }
}

完整的解决方案:

//prevent sql injection
$data  = mysql_fetch_array(mysql_query("SELECT * FROM upload WHERE id = '".intval($_GET['id'])."'"));
//now you can add as much paths as you like
$paths = [
    'd:/result/',
    'c:/result/'
];

foreach ($paths as $path) {
    if (file_exists($path . $data['name'])) {
        header("Content-Disposition: attachment; filename=" . $data['name']."; ".
               "Content-length: " . $data['size']."; ".
               "Content-type: " . $data['type']);

        print file_get_contents($path . $data['name']);
        exit;
    }
}

echo "File not found";
exit;