imagepng(): gd-png error: cannot allocate libpng main struct

linbeet 27天前 123

线下环境是用wamp搭的,开发过程中,全程验证码显示都是没问题的,而线上环境是用oneinstack安装的环境,我对比了两个环境的GD支持情况如下面,基本上没有差别,但就是当我把程序上传到线上测试的时候,这个验证码就死活不出来,直接报了如题或如下的完整错误信息。

GD扩展对比图: WAMP环境的截图LNMP环境的截图

线上环境测试时的报错信息:

imagepng(): gd-png error: cannot allocate libpng main struct

网上能搜索到的方法都试过了都没用,比如:

1、试了在生成验证码之前使用ob_end_flush或是ob_clean,加了同样报错
2、试了去除BOM的因素(但运行去除BOM的文件时没有检测出存在BOM的文件)
3、重新编译安装了GD扩展,结果也是报错

现在唯一没做的就是重新安装PHP了,不晓得是不是要重新安装环境才能解决问题,我的线上PHP版本是7.3.10,线下版本是7.3.4,也都是NTS版本,唯一不同的是线下环境用的WAMP,而线上用的是LNMP。

如果有知道问题所在,麻烦告知一下,真是都整了两天多了,都快崩溃啦!5555....

第1条附言·26天前

很高兴的跟大家说,解决了,是使用重装PHP办法解决的。

  • 把之前装的gd/libpng/libjpeg/freetype/libxml2及其devel版用YUM卸载
  • 再使用YUM把libpng/libjpeg/freetype/libxml2及其devel版重新装上
  • 下载最新版的libgd编译安装并指定了安装的路径
  • 最后装了PHP搞定,测试了验证码可用了
0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论

目前共有 3 条回复

sange
sange 27天前

我也遇到过类似的错误,不过跟你的不一样,我是重装了GD扩展就搞定了

ijax
ijax 26天前

我也是一样啊,装了PHP不下五次,每次到了安装GD库那里就出问题了,最后根据网上说编译PHP的时候加上--enable-m4_pattern_allow就能顺利编译通过,通过是通过了,现在验证码却用不了,还有加这个参数不懂是干嘛的?

camen
camen 26天前

看这错误大概率是装坏了,重装PHP吧