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

CodeIgniter 4使用DOMPDF渲染PDF时出现内存耗尽错误

问题:CodeIgniter 4中DOMPDF嵌入图片时内存耗尽且页面无响应

在本地CodeIgniter 4环境使用DOMPDF生成PDF时,仅嵌入图片就触发内存耗尽错误:

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 262148096 bytes)

尝试增大内存限制后页面持续加载无响应,相关代码如下:

$dompdf = new \Dompdf\Dompdf();

$image=file_get_contents(ROOTPATH."/public/img/ss_logo_bgwhite.png");
$imagedata=base64_encode($image);
$imgpath = '<img src="data:image/png;base64, '.$imagedata.'">';

$HTML='<body><div>'.$imgpath.'</div></body>';
$document_title = "Quote#$quoteId";

$options = $dompdf->getOptions();
$options->setDefaultFont('Helvetica');
$options->set('dpi','120');
$options->set('isRemoteEnabled', TRUE);
// $options->set('isPhpEnabled ', true);
$options->set('isHtml5ParserEnabled',true);
$options->set('tempDir', ROOTPATH.'/public/uploads/');
$dompdf->setOptions($options);
$dompdf->loadHtml($HTML);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream($document_title, ["compress" => 1, "Attachment" => false]);
解决方案参考
  • 放弃base64嵌入,改用本地文件路径
    base64编码会让图片体积膨胀约30%,大幅增加DOMPDF的内存消耗。直接引用本地文件路径即可,示例修改:
// 直接使用本地绝对路径
$imgPath = ROOTPATH . 'public/img/ss_logo_bgwhite.png';
$imgHtml = '<img src="' . htmlspecialchars($imgPath) . '" alt="Logo">';

同时确保DOMPDF的isRemoteEnabled已开启,临时目录有读写权限。

  • 优化图片尺寸与质量
    检查原始PNG图片的分辨率,如果是超大尺寸(比如几千像素),先压缩到PDF显示所需的实际大小(比如A4页面内的尺寸),用图片压缩工具减小文件体积,从根源降低内存占用。

  • 降低DOMPDF的DPI设置
    当前设置的120dpi对于PDF来说过高,PDF标准dpi为72,修改后可减少渲染内存消耗:

$options->set('dpi','72');
  • 合理设置内存限制
    不要盲目调大全局内存,而是在PDF生成代码前临时设置:
// 临时提升内存限制,生成后自动恢复
ini_set('memory_limit', '1G');

同时检查php.ini中的max_execution_time,确保有足够的执行时间,但如果还是无响应,优先排查图片处理方式而非内存。

  • 检查版本兼容性
    DOMPDF 2.0.0与PHP 8.0.x存在已知兼容问题,建议升级DOMPDF到最新稳定版,或调整PHP版本至8.1及以上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:46