今天才发现自己的网站会员注册页,验证码的图片竟然是无法显示的,难怪最近都没什么人注册……不清楚是因为最近修改过网站文件导致的还是换过服务器后一直如此,只能硬着头发一步步排查了。
首先是排查了最近修改过的网站文件,看不出问题,对验证码图片应该没有影响。
接下来用了 Chrome 浏览器内置的的检查工具,选中无法显示的验证码,右击点“检查”,果然发现了问题,看下图:
![](upload/attach/202407/6_WNJ6DVX3CBM8VJV.png)
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
这条信息很重要!如果是 500 错误,则代表可能是服务器问题;如果显示的是 404 错误,则可能是网站程序问题(比如伪静态问题等)
继续排查,打开网站的调试模式,发现错误信息里缺失什么函数,这下反应过来了,应该是 GD 库的问题了!
更换过服务器后,似乎忘记安装 GD 库了!
GD 库是什么?
GD 库是 PHP 处理图形的扩展库,它提供了一系列用来处理图片的 API(应用程序编程接口),使用 gd 库可以处理图片或者生成图片。在网站上,gd 库通常用来生成缩略图,或者对图片加水印,或者生成汉字验证码,或者对网站数据生成报表等。
首先检查到底有没有安装:
[root@hqwaliyun2024 techzhi]# php -m | grep gd
或
[root@hqwaliyun2024 techzhi]# php -i | grep "GD Support"
都没有回显,说明没有安装GD库。
此外,也可以上传一个 phpinfo.php 文件:
<?php
phpinfo();
?>
如果里面有“GD”一栏,并且是 enable 状态,说明是安装了。结果,确实没有……
用命令进行安装:
sudo yum install php-gd
检查PHP配置文件php.ini,在文件中查找以下行:
;extension=gd*
将前面的符号去掉,以启用 gd 库扩展。结果根本没有找到这项,我用的是php7.4。不管了,安装完成之后直接重启nginx服务:
sudo service nginx restart
此时访问 phpinfo.php,已经出现了“GD”一栏。
再次打开注册页,验证码图片终于回来了,问题完美解决!