我有一个包含许多不同类型文件的文件夹。我需要显示任何请求的文件,因此必须相应地调整标题。我试过的是:
header( 'Content-Type: ' . filetype( 'files/' . $file ) );
readfile( 'files/' . $file );
它适用于JPG,PNG和GIF文件,但由于某些原因,MP3文件已经崩溃浏览器,所以我认为它不适用于每种文件类型。这种方法或代码有问题吗?你会怎么做?谢谢!
答案 0 :(得分:3)
通过PHP Documentation,filetype()
返回文件的类型。可能的值是fifo,char,dir,block,link,file,socket和unknown。
您想要的是文件的MIME类型。你想要的是Fileinfo。例如:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
header("Content-Type: ".finfo_file($finfo, 'files/'.$file));
finfo_close($finfo);
readfile('files/'.$file);
如果可以的话,您也可以快速尝试mime_content_type,以确保系统没有其他任何问题。但不建议这样做,因为它已被删除。
答案 1 :(得分:1)
你必须发送正确的mime类型,这可能很棘手。
您可以使用mime-content-type功能,但这是已弃用的功能。
$mimetype = mime_content_type ( $file );
header( 'Content-type: '. $mimetype );
答案 2 :(得分:0)
将此用于mp3文件
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);