【发布时间】:2012-05-25 13:28:20
【问题描述】:
我目前正在制作一个文件托管网站。在用户下载文件之前重命名文件时遇到问题。上传文件时,原始名称保存在 mysql 数据库中,并将文件重命名为 id。
<?php
require("includes/inc.php");
$id = trim(sanitize($_GET['id'])); //Receives the id of the file from the url
if($id) {
$fileid = mysql_query("SELECT * FROM files WHERE id = '$id'");
if (mysql_num_rows($fileid) != 1) {
header('Location: download.php?error=invalid_file');
exit();
} else {
while($info = mysql_fetch_array($fileid)) {
$fileid2 = $info['id'];
$filename = $info['name'];
$ext = $info['ext'];
$filesize = $info['size'];
$downloads = $info['downloads'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Location: uploads/".$fileid2.".".$ext);
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: ' . $filesize);
}
?>
【问题讨论】:
-
我希望
$fileid2、$filename和$filesize在存储到数据库之前进行清理,以防止 HTTP 标头注入。 -
有什么问题?我没有看到将文件发送到客户端的任何代码,但除此之外没有什么特别突出的......
-
您在
header中使用$fileid2。如果我理解正确,您希望这是一个不同的名称,对吗? -
是的,我想把名字改成$filename
-
$info['name']不是原文件名吗?