php sendfile将文件大小附加到文件

php sendfile将文件大小附加到文件,php,download,Php,Download,我有代码在PHP中为请求的文件提供服务。这是测试代码,所以输入没有经过验证。顺便问一下,如何正确清理这种输入 $upload_dir = "/media/usb/dir"; $filename = $_GET['filename']; $mimetype = $_GET['mime']; $path = $upload_dir . $filename; header('Content-Description: File Transfer'); header("Content-Type: ".$m

我有代码在PHP中为请求的文件提供服务。这是测试代码,所以输入没有经过验证。顺便问一下,如何正确清理这种输入

$upload_dir = "/media/usb/dir";
$filename = $_GET['filename'];
$mimetype = $_GET['mime'];
$path = $upload_dir . $filename;
header('Content-Description: File Transfer');
header("Content-Type: ".$mimetype );
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
header("X-Sendfile: \"$path\"");
echo readfile($path);
但文件的大小(以字节为单位)会附加到每个文件中。 例如,如下所示的简单txt:

myfile
download.php?mime=text/plain&filename=my-file.txt
将变成这样:

myfile6
如何摆脱这种行为

我得到的文本文件如下:

myfile
download.php?mime=text/plain&filename=my-file.txt

readfile返回文件的大小。您可以将@添加到函数的开头以删除错误报告。echo@readfile$path;应仅显示文件名。

ReadiLife输出文件并返回字节数。除去回音。除此之外:你不应该像那样处理mimetype规范。将mimetype作为get参数传递,然后再将其返回有什么意义?请不要使用它,或者在服务器端检测mimetype。此答案中的所有内容要么不正确,要么不可取。错误抑制运算符只能在最糟糕的情况下作为最后手段使用,echo@readfile$path;仍将输出文件大小。