Php 内容类型标题不起作用,Firefox始终显示";文件「;或;预览文件“;作为文件类型

Php 内容类型标题不起作用,Firefox始终显示";文件「;或;预览文件“;作为文件类型,php,firefox,http-headers,download,content-type,Php,Firefox,Http Headers,Download,Content Type,我正在使用以下代码下载文件: $file_name = $_GET['file_name']; $file_size = filesize( 'files/' . $file_name ); $file_type = mime_content_type( 'files/' . $file_name ); header( 'Content-Type: ' . $file_type ); header( 'Content-Length: ' . $file_size ); header( 'Con

我正在使用以下代码下载文件:

$file_name = $_GET['file_name'];
$file_size = filesize( 'files/' . $file_name );
$file_type = mime_content_type( 'files/' . $file_name );

header( 'Content-Type: ' . $file_type );
header( 'Content-Length: ' . $file_size );
header( 'Content-Disposition: attachment; filename="' . $file_name . '"' );

readfile( 'files/' . $file_name );
而且效果很好,我可以下载文件。然而,有件事困扰着我。当我用Firefox下载一个文件时,下载对话框总是说该文件是一个“文档”,有时是一个“预览文档”,而不是一个图像或PDF或其他文件。有什么想法吗


编辑:我刚刚尝试了一个.svg文件(mime-type-image/svg+xml),对话框正确地显示了“可伸缩矢量图形”。但后来我尝试了一个.psd文件(mime类型的image/x-photoshop),得到了“Preview.app文档”。奇怪的有人能复制这个问题吗?此时,我认为这可能是Firefox的问题,因此我添加了“Firefox”作为标记。

脚本是否在此代码之前输出任何内容?您不能在输出任何内容后发送标题。这包括空格,确保你的文件以一个
开头,我确定,只是重新检查过。另外,对这样的代码要小心,盲目使用用户提供的文件路径时,你有一个相当大的错误。代码被简化以使问题更清楚。谢谢。Preview是苹果默认的可以查看很多东西的应用程序。如果接收文件的系统没有安装Photoshop,它可能会尝试改用预览。如果安装了PS,请确保1)内容类型标头具有正确的类型和子类型,2)内容处置中的文件名具有正确的扩展名。如果两者看起来都不错,那么将文件名添加到内容类型标题中的name参数中;有些客户端在这里查找文件名。