PHP下载PDF文件时提示“无法显示此PDF文档”问题排查
PDF下载后无法打开的问题排查及解决
- 路径拼接错误:代码里
$file_url = "assets$pdf";缺少目录分隔符/,应改为"assets/$pdf"。可以先打印$file_url确认是否指向真实存在的PDF文件,比如添加var_dump($file_url); exit;查看实际路径。 - 额外输出污染文件:确保代码执行前没有任何多余输出(比如文件开头的空格、BOM,或者之前的
echo/var_dump内容)。在readfile($file_url);之后必须加exit;或die();,防止后续代码输出内容破坏PDF结构。 - 文件权限不足:检查服务器进程是否拥有
assets目录下PDF文件的读取权限,权限不足会导致readfile无法读取完整内容,下载的文件损坏。 - 原PDF文件损坏:直接通过服务器路径访问该PDF,确认文件本身是否能正常打开。如果原文件已损坏,需要重新上传正确的PDF。
- Header设置不全:补充必要的响应头,尤其是文件长度,帮助浏览器正确识别文件:
另外若文件名含特殊字符,要用header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file_url));urlencode()处理:header("Content-Disposition: attachment; filename=".urlencode($slug).".pdf"); - 数据库查询无结果:如果传入的id不存在,
$ebookcek2会是空值,导致$file_url指向assets目录,readfile读取目录内容而非PDF。要先判断查询结果是否存在:if(!$ebookcek2){ exit('文件不存在'); }
内容的提问来源于stack exchange,提问作者Samet Dogus
相关产品推荐
相关产品推荐

