强制下载文件损坏的标题错误?

Posted

技术标签:

【中文标题】强制下载文件损坏的标题错误?【英文标题】:Force Download Files Broken Headers wrong? 【发布时间】:2011-12-08 15:46:33 【问题描述】:
if($_POST['mode']=="save") 
$root = $_SERVER['DOCUMENT_ROOT'];
$path = "/mcboeking/";
$path = $root.$path;
$file_path = $_POST['path'];
$file = $path.$file_path;

if(!file_exists($file)) 
    die('file not found');
 else 
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-Type: application/force-download');
    header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
    header("Content-Length: ".filesize($file));
    readfile($file);

当我下载文件并打开它时,我会收到一条错误消息。当我尝试打开 .doc 文件时,我收到消息:文件结构无效。 当我尝试打开 .jpg 文件时:无法打开此文件。它可能已损坏或预览无法识别的文件格式。

但是当我下载 PDF 文件时,它们打开时没有任何问题。

有人可以帮我吗?

附:我尝试了不同的标题,包括: header('Content-Type: application/octet-stream');

【问题讨论】:

【参考方案1】: $fsize = 文件大小($yourFilePath); $allowed_ext = 数组 ( // 档案 'zip' => '应用程序/zip', // 文件 'pdf' => '应用程序/pdf', 'doc' => '应用程序/msword', 'xls' => '应用程序/vnd.ms-excel', 'ppt' => '应用程序/vnd.ms-powerpoint', ); $mtype = mime_content_type($file_path); if ($mtype == '') $mtype = "应用程序/强制下载"; header("Pragma: public"); header("过期时间:0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("缓存控制:公共"); header("内容描述:文件传输"); header("内容类型:$mtype"); header("内容配置:附件;文件名=\"$asfname\""); header("内容传输编码:二进制"); header("内容长度:" . $fsize); //然后你的休息代码

【讨论】:

【参考方案2】:

您的标题与实际内容无关,因此问题在于实际内容有问题。

另外,您真的不应该尝试通过更改 Content-Type 标头来强制下载。让它保持应有的样子。让客户决定如何处理它。

【讨论】:

【参考方案3】:

确保除了 readfile() 数据之外不输出任何内容:确保 php 代码在 PHP 文件的第一个符号处以 <? 开头,并且在关闭 ?> 之后没有符号文件结尾,如空格或换行符(或完全删除 ?>)。

【讨论】:

【参考方案4】:

在 NOTEPAD 中打开 PHP 文件。按“另存为”并选择“ASCI”文件格式。这对我来说很有帮助,因为文件是 UTF8 格式,这就是原因。

【讨论】:

以上是关于强制下载文件损坏的标题错误?的主要内容,如果未能解决你的问题,请参考以下文章

PHP强制下载.xlsx文件损坏

强制下载提示php损坏文件

下载时文件损坏

如何在 C# 中使用 Ionic-zip 下载大文件时修复 zip 文件损坏错误

手机:下载 docx 文件,有时会显示文件已损坏的错误

如果视频文件损坏,MPMoviePlayerViewController 会返回错误吗?