今天遇到一个很奇怪的问题,可能是我对一些东西不太熟悉导致。

下面是pdf下载文件的php代码,代码是没有问题的,在本机测试通过。上传到服务器就出现问题,点击链接之后浏览器没有下载对话框弹出,而是直接在浏览器中打开文件,显示的内容是二进制内容。

function forceDownload($filename) { 
 
    if (false == file_exists($filename)) { 
        return false; 
    }
     
    // http headers 
    header('Content-Type: application-x/force-download'); 
    header('Content-Disposition: attachment; filename="' . basename($filename) .'"'); 
    header('Content-length: ' . filesize($filename)); 
 
    // for IE6 
    if (false === strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6')) { 
        header('Cache-Control: no-cache, must-revalidate'); 
    } 
    header('Pragma: no-cache'); 
         
    // read file content and output 
    return readfile($filename);
} 

最后找到问题所在了,php后台文件被我强制保存为utf-8格式(为了解决中文显示的问题,把所有的文件都改成utf-8了),这个问题导致浏览器接收到的response的content-type为text/html, 所以就直接输出二进制了。

解决方法:把后台php文件改成ANSI格式,问题解决,虽然可以正常work, 不过还是没搞懂为什么会产生这个问题。而且本机是没问题,估计跟服务器端的配置多少有点关系。

 

疑难杂症。MARK.

posted on 2012-05-13 20:47  Jeremy Ma  阅读(157)  评论(0)    收藏  举报