在php中下载文件也有我不想要的文件路径

时间:2015-09-16 19:47:33

标签: php

我正在尝试使用“download.php”中的以下代码下载文件:

<?php
$file = $_GET['file'];
header ("Content-type: octet/stream");
header('Content-Disposition: attachment; filename="'.$file.'"');
//header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
?>

我从链接中调用了这个download.php。例如,

  

的download.php?FILE = user_songs / 57 / MP3 / Satru_Munbu.mp3

但是已下载的文件名已更改。它看起来像“user_songs-57-mp3-Satru_Munbu.mp3”

似乎我传递的完整路径会被附加。任何人都可以帮我,我怎么能删除它?

2 个答案:

答案 0 :(得分:0)

“/”是一个保留字符,因此您需要对路径进行URL编码:

download.php?file=user_songs%2F57%2Fmp3%2FSatru_Munbu.mp3

顺便说一句,要小心,因为任何人都可以使用您的代码访问系统中的任何文件(只要Apache进程可以访问它)。例如,download.php?file=%2Fetc%2Fpasswd会下载您的/ etc / passwd文件。

答案 1 :(得分:0)

$file包含file=网址参数的完整内容,该参数是完整路径名。您可以使用basename()仅提取文件名部分。

header('Content-Disposition: attachment; filename="'.basename($file).'"');