You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从数据库下载BLOB类型的PDF文件,避免默认保存为.php格式

问题解决方法

你遇到的下载默认后缀为.php的问题,核心原因是没有显式给浏览器指定下载文件名,浏览器默认会将当前执行的PHP脚本名作为保存文件名。

只需要在输出Content-Type头之后,新增Content-Disposition响应头即可,该头可以指定文件保存时的默认名称,还可以控制是直接在浏览器内预览文件还是直接触发下载操作:

  • 如果需要保留当前浏览器直接预览PDF的效果,仅修改下载时的默认文件名,使用inline参数
  • 如果需要用户访问后直接触发PDF文件下载,不直接在浏览器内预览,使用attachment参数

修改后的代码参考:

if(isset($_POST['submit'])){
    $docno = $_POST['docno'];
    $admno = $_POST['admno'];
    $sql = "SELECT * FROM bonafide_cert WHERE DocumentNumber=:docno AND AdmssnNo=:admno";
    $query = $dbh->prepare($sql);
    $query->bindParam(':admno',$admno,PDO::PARAM_STR);
    $query->bindParam(':docno',$docno,PDO::PARAM_STR);
    $query->execute();  
    $results=$query->fetchAll(PDO::FETCH_OBJ);
    if($query->rowCount() > 0)
    {
        foreach($results as $result)
        {
             header('Content-Type:'.$result->mime);
             // 新增Content-Disposition头,filename后为默认保存的文件名,可按需求自定义命名规则
             header('Content-Disposition: inline; filename="证明文件_'.$docno.'.pdf"');
             // 可选补充:添加Content-Length头,让浏览器可以正常显示下载进度
             header('Content-Length: ' . strlen($result->pdf_file));
             echo $result->pdf_file;
             // 输出完成后直接退出,避免后续多余内容破坏PDF文件结构
             exit;
        }
    }
}

注意事项

  • 文件名如果包含中文,需要先做编码处理避免乱码,示例:
    $filename = rawurlencode('证明文件_'.$docno.'.pdf');
    header('Content-Disposition: inline; filename*=UTF-8\'\''.$filename);
    
  • 输出PDF内容前确保没有任何额外输出(比如PHP文件开头的空格、BOM头、其他echo调试内容等),否则会导致PDF文件损坏无法打开。
  • 若查询返回多条结果,上述代码中的exit会仅输出第一份PDF,如有多文件下载需求可自行调整逻辑,一般该场景单条查询返回单份PDF即可满足需求。

内容的提问来源于stack exchange,提问作者Aswin Haridas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:27:05