验证码使用不了 Fatal error: Call to undefined function imagettftext() 解决办法 PHP+GD库添加freetype拓展 解决问题的整个过程复盘
今天作者遇到一个问题 是使用某一验证码类时,PHP的报错imagettftext 函数未定义
PHP Fatal error: Call to undefined function imagettftext()
错误提示是指GD库中缺少freetype库,你装了GD不一定就支持freetype,很多人理解错误,freetype 不是一个独立的扩展,是附着在GD库上的。
freetype库相关知识补充
freetype库是一个完全免费开源的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType、OpenType、Type1、CID、CFF、Windows FON/FNT、X11 PCF等。
于是乎各种查找资料,最后终于解决,就是需要freetype 这个 下面详细说明一下解决问题的整个过程复盘。
运行环境 PHP 7.4.20
首先查询了一下PHP 相关扩展,查询得知,GD库扩展中并无freetypefreetype拓展 如下图:
假设本环节已经安装了libpng 和zlib jpegsrc 这几个和GD库配合使用的拓展。
首先按照查找到的资料先去按照Freetype库 官网下载地址:Index of /releases/freetype/
下载对应版本
也可使用wget 命令 如下:
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2
tar jxvf freetype-2.4.0.tar.bz2
cd freetype-2.4.0
./configure --prefix=/usr/local/freetype
make && make install
其中prefix 为安装的目录 要记住的 后续有用
安装好了 需要到啥ext目录中的GD目录中进行编译
此时我并不知道GD库的那个ext在哪里,网上也没说的很明白 于是乎使用find 命令 命令具体如下:
find / -name gd.so
/usr/lib64/php/modules/gd.so
/mkd/php-7.4.20/ext/gd/modules/gd.so
/mkd/php-7.4.20/ext/gd/.libs/gd.so
/www/php/lib/php/extensions/no-debug-non-zts/gd.so
结果显示我的那个目录在 /mkd/php-7.4.20/ext/gd
cd /mkd/php-7.4.20/ext/gd
确保先安装freestyle,然后是php-gd;如果是先安装了php-gd,那么在安装完freestyle后,需要make clean。(这句很重要,这句很重要,这句很重要)
鉴于我已经是先按照好GD库,在安装的freetype,于是输入命令
make clean
接着执行PHP安装目录下的一个phpize 我的PHP安装目录在/www/php/bin/phpize 于是我输入命令
/www/php/bin/phpize
此时出现报错
cannot find config.m4 这个
于是又百度 得出结果是
扩展包下面的名字不是config.m4,有可能有类似config0.m4的文件;因此名字不一样也是找不到的,我们需要用mv config0.m4 config.m4;修改文件名字,再来运行phpize
于是整个编译命令是
cd /mkd/php-7.4.20/ext/gd 进入zlib扩展目录
mv config0.m4 config.m4; 重命名config0.m4
/www/php7/bin/phpize
/configure -with-php-config=/www/php/bin/php-config --with-freetype=/usr/local/freetype
make && make install;
其中 -with-php-config 为PHP安装目录下的php-config 这个 --with-freetype为freetype安装的目录 网上很多都写成了 --with-freetype-dir 因为版本问题 PHP 7.4 只能写成 --with-freetype 要不然编译报错。
官方给出的参数说明:
最后是重启php了 使用命令 如下:
killall php-fpm
/www/php/sbin/php-fpm
或者使用信号进行重启 使用命令 如下:
lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 15681 root 8u IPv4 24056585 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 15682 nobody 6u IPv4 24056585 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 15683 nobody 6u IPv4 24056585 0t0 TCP localhost:cslistener (LISTEN)
kill -USR2 15681