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

Laravel使用SnappyPDF生成PDF时报退出码1 QSslSocket错误

问题根因

这个报错是SnappyPDF底层依赖的wkhtmltopdf工具和服务器系统的OpenSSL版本不兼容导致的:旧版wkhtmltopdf使用的Qt框架依赖OpenSSL 1.0.x的接口,而现在主流服务器发行版(比如Ubuntu 22.04+、CentOS 9+)默认预装的是OpenSSL 3.x,移除了旧版接口,所以运行时找不到对应函数。本地环境能正常运行是因为本地的OpenSSL版本和wkhtmltopdf的依赖匹配。

可行解决方案

以下方案按落地成本从低到高排序:

  • 方案1:关闭wkhtmltopdf的SSL校验(最快临时解决)
    如果你的PDF内容里没有加载HTTPS的外部资源,或者不需要严格SSL校验,直接在生成PDF前加参数关闭SSL相关功能即可,修改代码如下:

    $pdf = SnappyPDF::loadHTML($html)
        ->setOption('ignore-ssl-errors', true)
        ->setOption('no-stop-slow-scripts', true)
        ->save('reports/cargo_manifest_' . str_pad($cargo->id, 6, '0', STR_PAD_LEFT) . '.pdf');
    

    如果HTML内容完全没有外部HTTPS资源,还可以额外加->setOption('disable-external-links', true)彻底禁用外部链接加载,避免触发SSL逻辑。

  • 方案2:安装适配OpenSSL 3.x的wkhtmltopdf版本
    目前官方已经推出支持OpenSSL 3.x的wkhtmltopdf版本,直接替换服务器上的旧版本即可:

    1. 先卸载服务器原有wkhtmltopdf:Debian/Ubuntu系执行sudo apt remove wkhtmltopdf,RHEL/CentOS系执行sudo dnf remove wkhtmltopdf
    2. 下载对应系统架构、支持OpenSSL 3.x的wkhtmltopdf版本,解压后将二进制文件放到/usr/local/bin目录,执行sudo chmod +x /usr/local/bin/wkhtmltopdf赋予执行权限
    3. 执行wkhtmltopdf --version验证安装成功后,重新运行代码即可。
  • 方案3:安装旧版OpenSSL兼容包
    如果不方便升级wkhtmltopdf,可以直接安装系统的旧版OpenSSL兼容包:

    • Ubuntu/Debian系执行sudo apt install libssl1.1
    • CentOS/RHEL系执行sudo dnf install openssl1.0
      安装完成后重启web服务和php-fpm服务即可生效。
  • 方案4:使用静态编译版wkhtmltopdf
    直接下载官方预编译的静态版本wkhtmltopdf,静态版本将所有依赖打包到二进制文件中,不依赖系统的OpenSSL版本,解压放到可执行目录赋予权限即可直接使用,无需额外安装依赖。

内容的提问来源于stack exchange,提问作者Muhammad Nabeel Siddiqui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:54:05