简述
先来看下具体的报错信息如下图,估计也只有火狐浏览器才对开发者这么友好的提示了,其他大部分浏览器都是直接一张打着叉叉的图.
火狐报错:
谷歌报错:
解决思路
1.如果出现上面的报错信息,请检查你的配置环境问题(当然基本上很少出现问题)
2.字体库文件位置是否正确(正常都是放在项目同目录下),怎么判断?阁主是相同的代码和环境下只有在小于PHP7.2版本才不会出现报错.也就是说本质还是在某个代码段中出现了不兼容的情况,在不修改BUG的情况下,我上传到Linux服务器上,在PHP7.3中也是完美支持的.但是在Windows环境下,只要是大于PHP7.0的环境都会报错,也就是说确实是某个代码段不支持Windows环境.
3.由于上述情况,最后我将可能导致此问题的代码段逐一排查找了出来,最后问题是出在函数imagettftext()新版本的PHP(>7.0)可能存在某种玄学兼容的情况下导致的报错,由于起初我给字体库文件的是相对路径,后面想一下会不会在Windows下需要严格一点,需要指定绝对路径.最后果不其然,确实如此!问题解决.
解决方案
BUG出现问题:GD库加载字体文件时,需要提供绝对路径.
这里就直接贴解决的代码了,我的解决思路就是把原来赋值的相对路径使用函数realpath()转换为系统的绝对路径,在把绝对路径赋给imagettftext()函数.
//引入字体相对路径 $font_face = './fonts/arialbd.ttf'; //为减少不必要的麻烦,字体路劲一定要使用绝对路径 //GD库加载字体文件时,需求提供绝对路径,路径用realpath()将相对路径转成绝对路径(目前测试PHP>7.0需要使用绝对路径) $font_face = realpath($font_face); imagettftext($img, mt_rand(16, 18), mt_rand(-10, 10), 8 + (18 * $i), 24, $font_color, $font_face, $text);
验证码生成正常:
忠告
1、字体路径问题:为减少不必要的麻烦,请一定要使用绝对路径
2、字体格式:建议使用ttf格式,ttc有可能在linux上不兼容。
3、安装GD库扩展,同时需要freetype扩展,并且是高版本,请安装2.3.11以上版本。
本文地址:https://www.mainblog.cn/228.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。