这是我的代码。我写这个是为了提供mp3,图像和视频。收到Mp3文件并且运行良好。图像和视频已收到但已损坏。我是php的新手。
<?php
if( !empty( $_GET['type']|| $_GET['name']|| $_GET['ext'] ) ) {
// check if user is logged
if(true) {
$type = preg_replace( '#[^-\w]#', '', $_GET['type'] );
$name = $_GET['name'] ;
$file = "{$_SERVER['DOCUMENT_ROOT']}/cont/{$type}/{$name}";
echo $file;
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
}
}
die( "ERROR: invalid file or you don't have permissions to download it." );
你能帮助我吗?
答案 0 :(得分:1)
在实际响应之前有一个echo $file;
并不属于那里。
除了文本本身,PHP还会在第一次调用header()
时产生警告。这两个都到达文件头之前的最终内容,并使大多数文件读取器无法识别浏览器收到的数据。