验证码使用不了 Fatal error: Call to undefined function imagettftext() 解决办法 PHP+GD库添加freetype拓展 解决问题的整个过程复盘

19 篇文章 0 订阅
15 篇文章 1 订阅

今天作者遇到一个问题  是使用某一验证码类时,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值