今天遇到一个很奇怪的问题,可能是我对一些东西不太熟悉导致。
下面是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.
浙公网安备 33010602011771号