0

我有一个包含许多不同类型文件的文件夹。我需要显示任何请求的文件,因此必须相应地调整标题。我尝试的是:

header( 'Content-Type: ' . filetype( 'files/' . $file ) );

readfile( 'files/' . $file );

它适用于 JPG、PNG 和 GIF 文件,但由于某种原因 MP3 文件已经使浏览器崩溃,所以我想它不适用于每种文件类型。方法或代码有问题吗?你会怎么做?谢谢!

4

3 回答 3

3

通过PHP 文档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(如果可用),以确保系统没有其他问题。但不推荐这样做,因为它已被贬低

于 2012-10-03T15:54:04.037 回答
1

您必须发送正确的 mime 类型,这可能很棘手。

您可以使用mime-content-type函数,但这是一个已弃用的函数。

$mimetype = mime_content_type ( $file );
header( 'Content-type: '. $mimetype );
于 2012-10-03T15:53:53.087 回答
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);
于 2012-10-03T15:52:58.753 回答