我正在尝试使用“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”
似乎我传递的完整路径会被附加。任何人都可以帮我,我怎么能删除它?
答案 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).'"');