文档章节

Magento 添加验证码,请求503,系统日志报错:Image CAPTCHA requires FT fonts support

a
 alt_tab_jj
发布于 2018/10/16 10:55
字数 964
阅读 31
收藏 0

今天为ETS网站增加了注册时需要验证码的功能.在本地测试正常,上传到线上之后发现无法正常显示验证码图片 检查发现验证码刷新的动作请求503

这个功能我再其他网站也添加了都没有问题。本地也没问题,那么最大可能就是线上环境导致的问题。 于是检查系统错误日志,发现在日志中有:Image CAPTCHA requires FT fonts support 错误。

于是google 搜索了一下,有人说是GD扩展没有安装造成的。

但我查看线上phpinfo()发现GD扩展有安装。

我只好在代码中搜索报错提示Image CAPTCHA requires FT fonts support

查找到报错代码位置 lib\Zend\Captcha\Image.php 460行:

protected function _generateImage($id, $word)
    {
        if (!extension_loaded("gd")) {
            #require_once 'Zend/Captcha/Exception.php';
            throw new Zend_Captcha_Exception("Image CAPTCHA requires GD extension");
        }

        if (!function_exists("imagepng")) {
            #require_once 'Zend/Captcha/Exception.php';
            throw new Zend_Captcha_Exception("Image CAPTCHA requires PNG support");
        }

        if (!function_exists("imageftbbox")) {
            #require_once 'Zend/Captcha/Exception.php';
            throw new Zend_Captcha_Exception("Image CAPTCHA requires FT fonts support");
        }
        .........

可查看到代码报错条件是找不到 imageftbbox 方法。 在php官网查看imageftbbox方法在注释中发现了重点:

Note: 此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。
Note: 此函数仅在 PHP 编译时加入 freetype 支持时有效(--with-freetype-dir=DIR )。

这个函数需要GD扩展版本不低于2.0.1 并且需要编译加入freetype!!!

我想这应该就是问题所在了,我的GD扩展版本虽然大于2.0.1 但 没有支持freetype.在phpinfo()GD扩展显示中并没有freetype 于是网上搜索教程安装freetype,并更新GD扩展

安装freetype

  1. 下载freetype-2.4.0.tar.gz
  2. 解压 freetype-2.4.0.tar.gz:
    tar -zxvf freetype-2.4.0.tar.gz
    
  3. 编译安装freetype
    cd freetype-2.4.0
    ./configure --prefix=/usr/local/freetype --enable-shared
    make && make install
    

也可直接用yum install freetype 直接安装

重新编译安装GD扩展

  1. 进入php源码安装目录的扩展文件夹
    cd /usr/src/php-5.5.29/ext/gd
    
  2. 执行make清除原有安装记录
    make clean
    
  3. /usr/local/php/bin/phpize
  4. 重写编译配置
    ./configure --with-php-config=/server/programs/php/bin/php-config --with-zlib-dir --with-png-dir --with-freetype-dir --with-jpeg-dir --with-gd
    
  5. make && make install

开启扩展

  • vi /usr/local/php/lib/php.ini
  • 添加 extension=gd.so

重启服务

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

问题来了

我的php环境,最开始编译安装时已启用了GD扩展,但不支持freetype,现在希望在不重新安装php的情况下,使其支持freetype

我尝试用phpize重新编译GD库扩展生成gd.so但在php.ini中加入extension=gd.so后重启php,会报错PHP Warning: Module 'gd' already loaded in Unknown on line 0

所以在php.ini中添加启用GD扩展是不行的.

原因是编译安装php时启用的扩展,属于静态扩展,如需改动,只能重新编译安装php

但安装完成php后,通过phpize安装的动态扩展,是可以通过重新编译安装进行改动,不需要重新编译安装php

所以我这种情况还是只能重新编译PHP

重新编译PHP

  1. cd /usr/src/php-5.5.29
  2. make clean
  3. 添加上freetype配置参数
./configure --prefix=/usr/local/php --enable-fpm --with-zlib --enable-mbstring --with-openssl --with-mysql --with-mysqli --with-mysql-sock --with-gd --with-jpeg-dir=/usr/lib --enable-gd-native-ttf --enable-pdo --with-gettext --with-curl --with-pdo-mysql --enable-sockets --enable-bcmath --enable-xml --with-bz2 --enable-zip  --with-jpeg-dir=/usr/local/jpeg  --with-png-dir=/usr/local/png --with-mcrypt=/usr/local/libmcrypt  --with-freetype-dir=/usr/local/freetype
  1. make && make install
  2. /etc/init.d/php-fpm restart

最后查看phpinfo()信息的GD扩展,检查是否有freetype

FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.4.0

© 著作权归作者所有

a
粉丝 0
博文 9
码字总数 7232
作品 0
深圳
私信 提问
CodeIgniter tips:验证码帮助类

在CI中,做验证类可以这样做,首先给出的是手册中的做法 加载辅助函数 用下面的代码加载验证码辅助函数:网络营销培训 $this->load->helper('captcha'); 可用的函数如下: captcha_create($data...

网络营销
2012/02/09
100
0
CI框架验证码CAPTCHA 辅助函数的使用

使用CAPTCHA 辅助函数很方便生成验证码,但是图片是存储在文件夹下,不是输出流,感觉不够完美,可以拿来用用。 说明:产生4位的随机数,CI根目录下建立captcha文件夹。 load->helper('capt...

晨曦之光
2012/03/09
2.9K
0
菜鸟学Python之django-simple-captcha使用

环境的准备 前端框架semantic ui Python 3.6.4 django-simple-captcha官方文档地址 http://django-simple-captcha.readthedocs.io/en/latest/ 目标展示 配置settings.py 配置form.py 配置vie......

红焖鲤鱼
2018/02/24
3.1K
0
Play!框架文档翻译:验证码(Captcha)

Because anyone can post a comment to our blog engine, we should protect it a little to avoid automated spam. A simple way to protect a form from this is to add a captcha image. ......

红薯
2010/07/13
2.3K
0
短信验证码防刷增加的图片验证码功能

在登录注册的时候,一般都需要进行短信验证码认证。此时,为了防止恶意刷短信,会增加图片验证码。这时,问题来了。图片验证码生成一般都是后台提供的链接直接显示生成,如:,那么此时,生成...

安静的敲代码
2017/07/03
288
1

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
40分钟前
3
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
58分钟前
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部