centos6.5下 GD库不支持jpeg的问题

背景:公司商城网站用的是ecmall,在发布商品时,有个上传图片然后生成缩略图的功能。对于图片的操作,php基本是用GD库来完成的。今天同事上传j完jpeg类型的商品图片后,在商品详情页的图片全裂了。看了服务器的图片存储地址后,发现并没有对应的缩略图文件。回查代码发现一直到调用ecmall生成缩略图函数make_thumb(...)都还正常着,在make_thumb()函数里,开始有个判断  if (function_exists('imagejpeg'))  的没有通过。果断往服务器上加了一个特定参数访问输出phpinfo()的文件,开始查看服务器环境(主要是GD一块),然后就看到GD的扩展里只有png、gif是支持的没看到jpeg的。

定位到问题所在后,就是百度解决了,毕竟对于运维自己也不是很擅长。以下是解决时参照的博文:

http://www.9enjoy.com/post/243/ (主要是重新编译php时会用到的配置)

http://www.52web.me/35.html  (主要是安装支持jpeg相关的一些内容,这篇博文里有些命令的符号有问题,需要注意,报错了就看下符号是不是对着)


按照我一年前的安装方法安装后,最近发现GD库并未完全生效。
在phpinfo中的GD模块显示
GD Support  enabled  
GD Version  bundled (2.0.28 compatible)  
GIF Read Support  enabled  
GIF Create Support  enabled  
PNG Support  enabled  
WBMP Support  enabled  
XBM Support  enabled  

没有JPG。研究了一下网上成功安装的例子,觉得还是php的配置问题,经过三次的失败后,终于成功。最终配置为
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-gd=/usr/local/gd --with-zlib --with-png --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --enable-sockets --with-iconv --enable-mbstring --with-curl=/usr/local/curl --with-mssql=/usr/local/freetds 

主要是--with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype 这两个的配置。

安装成功后,GD模块多了如下显示:
JPG Support  enabled  
FreeType Support  enabled  
FreeType Linkage  with freetype  
FreeType Version  2.2.1 

这是昨天做的,php5下的GD库,今天把一台没有安装GD库的运行php4.4的服务器安装GD库。
仍然按照这个步骤安装zlib,libpgn,freetype,jpeg,gd2,然后在原php配置参数上加上--with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype,重新编译,安装完成重启Apache后,看了下phpinfo,成功显示。

点击在新窗口中浏览此图片

不过,并不是完全顺利,在安装php时,提示configure: error: Unable to find gd.h anywhere under /usr/local/gd。
奇怪,去下载了最新的gd-2.0.35,重新编译gd,在编译时就出错。只好再装一次gd-2.0.33,装完看了下在/usr/local/gd/include下有gd.h了。再次装php,就正常了,也不知道是什么原因。



Linux下安装并开启PHP GD库的方法
2012年03月31日  ⁄ Linux ⁄ 共 2450字 ⁄ 暂无评论 ⁄ 被围观 6,568 views+

1、首先下载以下源码包

http://google-desktop-for-linux-mirror.googlecode.com/files/gd-2.0.35.tar.gz

http://down1.chinaunix.net/distfiles/jpegsrc.v6b.tar.gz

ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.2.tar.gz

http://google-desktop-for-linux-mirror.googlecode.com/files/zlib-1.2.3.tar.gz

http://down1.chinaunix.net/distfiles/freetype-1.3.1.tar.gz

http://down1.chinaunix.net/distfiles/gettext-0.16.1.tar.gz

2、安装zlib

# tar xvzf zlib-1.2.3.tar.gz

# cd zlib-1.2.3

# ./configure

# make && make install

3、安装freetype

# tar xvzf freetype-1.3.1.tar.gz

# cd freetype-1.3.1

# ./configure –prefix=/usr/local/freetype

# make && make install

有多行错误类似:ftdump.c:172:1: error: pasting “.” and “glyph_object” does not give a valid preprocessing token

解决方法:修改 test/ftdump.c 里面的代码:

将 Print_Mem( memory_footprint.##field, string )  改为: Print_Mem( memory_footprint.field, string )

将 #define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field ) 改为: #define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )

重新make && make instal

 

或者修改Makefile.in:

1. 去掉all: ttlib tttest ttpo中的tttest

2. 删除

install:
cd $(FTLIBDIR); $(MAKE) -f $(MAKEFILE) install
cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install
cd $(FTPODIR); $(MAKE) install
中的 cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install

# ./configure –prefix=/usr/local/freetype

 

# make && make install

4、安装libpng

# tar xvzf libpng-1.5.2.tar.gz

# cd libpng-1.5.2

# ./configure –prefix=/usr/local/libpng

# make && make install

5、安装jpegsrc

# tar xvzf jpegsrc.v6b.tar.gz

# cd jpegsrc.v6b

# ./configure –prefix=/usr/local/jpeg6  –enable-shared –enable-static

# make && make install

可能的错误:提示文件夹不存在,应该是程序不能自动创建文件夹吧,根据提示的错误,手动用mkdir创建文件就可以了。

本次例如:

# mkdir -p /usr/local/jpeg6/include/

# mkdir -p /usr/local/jpeg6/lib/

# mkdir -p /usr/local/jpeg6/bin/cjpeg

# mkdir -p /usr/local/jpeg6/man/man1/

6、安装gettext(有的直接就有,可以先安装GD库,报错再返回来安装)

# tar xvzf gettext-0.16.1.tar.gz

# cd gettext-0.16.1

# ./configure –prefix=/usr/local/gettext

# make && make install

7、安装GD

# tar xvzf gd-2.0.35.tar.gz

# cd gd-2.0.35

# ./configure –prefix=/usr/local/gd –with-jpeg=/usr/local/jpeg6 –with-png=/usr/local/libpng –with-freetype=/usr/local/freetype

# make

# make install

configure…这一步可能的错误:configure.ac:64: error: possibly undefined macro: AM_ICONV,这个就必须安装gettext(步骤6中有讲)

8、生成gd.so

# cd ../php-5.2.17/ext/gd/

#/usr/local/php5/bin/phpize

#./configure –with-php-config=/usr/local/php5/bin/php-config –with-jpeg-dir=/usr/local/jpeg6/ –with-png-dir=/usr/local/libpng/ –with-gd=/usr/local/gd/ –with-freetype-dir=/usr/local/freetype/

# make && make install

这时在make install的结尾会有gd库存放的位置,从那个文件夹中将gd.so复制到扩展库目录中

9、修改PHP.ini

在php.ini中添加如下内容

extension=gd.so

10、安装结束,重启Apache服务

# service httpd restart

总结:

按照第一篇的博文可以将第二篇里提到的关键扩展  freetype  jpeg装好,按照第二篇里的内容可以将配置加到自己php重新编译时要用到的命令里,这样再结合我上一篇博文lnmp搭建里记录的php编译命令,就较好的解决了问题存在了(网上有看到phpize模式下可以不用重新编译所有php的方法,但是我尝试过程中总有些错误,所以先用笨方法解决问题,后期有时间再看看那种编译方式)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值