验证码使用不了 Fatal error: Call to undefined function imagettftext

发布时间:2023-08-07 16:26:29编辑:文明阅读(1455)

    今天作者遇到一个问题  是使用某一验证码类时,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.bz2tar jxvf freetype-2.4.0.tar.bz2cd freetype-2.4.0./configure --prefix=/usr/local/freetypemake && 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/freetypemake && 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:9000COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEphp-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

关键字imagettftextgd

    还没有小伙伴评论,快来抢沙发啦~~!