从PHP提供.dmg文件时,用户正在获取“无法识别磁盘映像”

时间:2014-09-18 15:01:07

标签: php iis mime dmg

我的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应用程序/八位字节流,但我仍遇到同样的问题。

1 个答案:

答案 0 :(得分:1)

我的猜测是,这可能是内容类型未正确设置或内容长度设置不正确的情况。检查$mime = contenttype($extension);是否返回正确的内容类型。

使用Web调试代理工具(如Fiddler或Charles)进行调试并在直接访问文件时发布整个响应标题会很有用。当你通过PHP脚本访问它时。

更新(基于以下评论):

该脚本在文件末尾有其他换行符,这些换行符在响应中发送出去。