我的IIS服务器上有一个.dmg
文件。当直接下载文件打开就好了,但是当我通过PHP提供文件时这样
$mime_types['dmg'] ='application/x-apple-diskimage';
$filename = getfile($_GET['dc']);
$fakename = fakefilename($_GET['dc']);
$extension = fileexten($filename);
if(($filename!= false)&&($fakename!=false&& @fopen($filename,'r')==true)){
$mime = contenttype($extension);
set_time_limit(0);
header('Pragma: public');
header('Expires: 0');
header("Content-Type:".$mime);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Disposition: attachment;filename='.$fakename.'.'.$extension);
header("Content-Transfer-Encoding: binary");
if (ob_get_length() > 0) {
ob_end_clean();
}
flush();
@readfile($filename);
}
我在mac上遇到错误,说“磁盘映像无法识别' 我也尝试过设置.dmg应用程序/八位字节流,但我仍遇到同样的问题。
答案 0 :(得分:1)
我的猜测是,这可能是内容类型未正确设置或内容长度设置不正确的情况。检查$mime = contenttype($extension);
是否返回正确的内容类型。
使用Web调试代理工具(如Fiddler或Charles)进行调试并在直接访问文件时发布整个响应标题会很有用。当你通过PHP脚本访问它时。
更新(基于以下评论):
该脚本在文件末尾有其他换行符,这些换行符在响应中发送出去。