强制下载文件损坏的标题错误?
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 格式,这就是原因。
【讨论】:
以上是关于强制下载文件损坏的标题错误?的主要内容,如果未能解决你的问题,请参考以下文章