2014-02-10 58 views
0

以下PHP代码段导致内部500错误,我认为它是一个或多个标头。我已启用错误报告,但它没有报告任何内容。有人可以看到问题可能是什么?谢谢。导致内部500错误的PHP标头函数

$file = CLIENTFOLDERS.$_GET['download']; 
$fileSize = filesize($file); 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$type = finfo_file($finfo, $file); 
finfo_close($finfo);   
header("Cache-Control: private"); 
header("Content-Type: ".$type); 
header("Content-Length: ".$fileSize); 
header("Content-Disposition: attachment; filename=".basename($file));  
readfile($file);     
exit(); 

奇怪的是,文件下载和我得到的响应头回:

Cache-Control:private 
Connection:Keep-Alive 
Content-Disposition:attachment; filename=CPS Letterhead form.doc 
Content-Length:4 
Content-Type:application/msword 
Date:Mon, 10 Feb 2014 20:21:00 GMT 
Expires:Thu, 19 Nov 1981 08:52:00 GMT 
Keep-Alive:timeout=5, max=100 
Pragma:no-cache 
Server:Apache/2.4.7 (Win32) PHP/5.5.6 
X-Powered-By:PHP/5.5.6 

但MS Word和Excel文档被破坏。 PDF和文本文件加载正常。没有检查图像文件。

+2

最有可能不是头,认为它可能是,如果'$ type'没有返回任何东西。检查服务器日志。 – Cfreak

+0

'var_dump($ type)'? – Hast

+0

PHP版本5.3.0或更高版本? – 2014-02-10 19:57:04

回答

0

你可以检查什么基本名称($文件)是?是否有像.pdf一样附加的扩展名。如果不存在,则会导致错误。添加.pdf或任何您想要下载并尝试的格式。
您也可以尝试以下设置标题:

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=\"basename($file)\""); 
header("Content-Type: ".$type); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".$fileSize); 
+0

在readfile之前放置退出会给我空文件,不是吗? – user1532602

+0

我的坏...它会给你空的文件。 :) – RiksAndroid

+0

我编辑了答案。试试这个。 – RiksAndroid