配置PHP使之能同时支持GIF和JPEG_php基础

问题:安装蓝点Linux 2.0后,进行PHP编程,发现只能处理GIF图像,不能处理JPEG图像。后来知道PHP处理图像,使用了GD库,而GD库开始时是支持GIF的,但由于GIF使用了有版权争议的LZW算法,会引起法律问题,于是从GD-1.6开始,GD库不再支持GIF,改为支持更好的,无版权争议的PNG。而我现在希望同时支持GIF,PNG和JPEG。经过尝试,我成功地做到了这一点。下面介绍具体做法。我的配置为:蓝点Linux 2.0,Kernel-2.2.16,MySQL-3.23.10alpha,Apache-1.3.12,PHP4.0.1pl2,gd-1.8.3,Jpeg6b。

我将按照由底向上的顺序介绍,即Jpeg->GD->PHP->Apache。

0、 当前状态查看
安装蓝点Linux 2.0后,Kernel,MySQL,Apache未做任何改变,看看当前状态如何。
创建一PHP文件,名为info.php,放于Apahce的文档目录下(/etc/httpd/html),其内容如下:
<? phpinfo(); ?>
文件就只有1行。用浏览器打开该文件URL(我的hostname为zhangzh):
http://zhangzh/info.php
如果Apache/PHP正常运行的话,页面中将会列出PHP版本,Apache版本,以及其他各种有用的信息。我关心的是GD库部分,看看它是否支持GIF、JPEG,结果发现支持GIF而不支持JPEG。

1、 Jpeg6b的安装和配置
Jpeg的主要文件有jpeglib.h, libjpeg.a, libjpeg.so等。首先检查系统中安装了没有,到/usr/include目录下看有无jpeglib.h,到/usr/lib目录下看有无libjpeg.a和libjpeg.so。我的系统中没有,因而要安装。
获取Jpeg源码的地址为:
ftp://ftp.uu.net/graphics/jpeg/
取得的文件为jpegsrc.v6b.tar.gz,放于/usr/src目录下。
进入/usr/src目录中,开始安装过程。
进入/usr/src:
cd /usr/src
解开压缩文件:
tar xzvf jpegsrc.v6b.tar.gz
命令完成后多了一个子目录jpeg-6b,Jpeg的源码文件就在其中。
进入该子目录:
cd jpeg-6b
该目录中的install.doc文件详细介绍了如何安装Jpeg,照章行事即可。
配置生成Makefile文件:
./configure
命令完成后该目录下多了个Makefile文件。Makefile文件是许多软件编译、安装的配置和过程控制文件,十分重要,应该学会看懂它的内容。
开始编译:
make
命令完成后该目录下多了许多文件,其中重要的是libjpeg.a和libjpeg.so。
安装:
make install
命令完成后,jpeglib.h被拷到/usr/local/include目录下,libjpeg.a和libjpeg.so被拷到/usr/local/lib目录下。

2、 GD-1.8.3的安装和配置
GD的主要文件有gd.h, libgd.a等。
获取GD源码的地址为:
http://www.boutell.com/gd/
取得的文件为gd-1.8.3.tar.gz,放于/usr/src目录下。
已知道该版本的GD不支持GIF,但想来象我一样希望GD同时支持GIF和JPEG的人不少,于是有人做了个补丁,把对GIF的支持加回去了。看起来这是个英国人吧,他的Email地址为adam@elysium.ltd.uk。
获取补丁源码的地址为:
http://www.webofsin.com/gd-1.8.3-gif.patch
取得的文件为gd-1.8.3-gif.patch,放于/usr/src目录下。
进入/usr/src:
cd /usr/src
解开压缩文件:
tar xzvf gd-1.8.3.tar.gz
命令完成后多了一个子目录gd-1.8.3,GD的源码文件就在其中。
给源码打补丁:
patch -p0 命令完成后gd-1.8.3子目录下多了个gd_gif.c文件,而文件gd.h和Makefile也被作了相应修改。
进入该子目录:
cd gd-1.8.3
缺省情况下,GD库编译时并不加入JPEG支持,得修改Makefile文件。
修改Makefile文件,使得:
CFLAGS=-O -DHAVE_XPM -DHAVE_JPEG -DHAVE_LIBTTF
LIBS=-lm -lgd -lpng -lz -ljpeg -lttf -lXpm -lX11
此后,编译并安装: 
make
make install
命令完成后,gd.h被拷到/usr/local/include目录下,libgd.a被拷到/usr/local/lib目录下。

3、 PHP-4.0.1pl2的安装和配置
PHP的主要文件有libphp4.a, libphp4.so等。
获取PHP源码的地址为:
http://php.net
取得的文件为php-4.0.1pl2.tar.gz,放于/usr/src目录下。
进入/usr/src目录并解压文件:
cd /usr/src
tar xzvf php-4.0.1pl2.tar.gz
命令完成后多了一个子目录php-4.0.1pl2,PHP的源码文件就在其中。
进入该子目录:
cd php-4.0.1pl2
该目录中的INSTALL文件详细介绍了如何安装PHP,照章行事即可。
配置生成Makefile文件:
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' 
'--with-config-file-path=/etc/httpd' '--enable-safe-mode' 
'--with-system-regex' '--disable-debug' 
'--with-zlib' '--enable-magic-quotes' '--enable-track-vars' 
'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
注意最后一行参数'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local',指明了Jpeg和GD的目录为/usr/local,这是根据步骤1、2中make install的结果而指定的。
(由于命令太长,建议写成shell文件再执行。文件my-php-conf内容如下:
#! /bin/sh
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' 
'--with-config-file-path=/etc/httpd' '--enable-safe-mode' 
'--with-system-regex' '--disable-debug' 
'--with-zlib' '--enable-magic-quotes' '--enable-track-vars' 
'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
用shell执行之:
sh my-php-conf
效果是一样的。)
命令完成后该目录下多了个Makefile文件。
编译并安装:
make
make install
命令完成后,libphp4.so被拷到/usr/lib/apache目录下。

4、 Apache的配置
Apache本身不必重新编译安装,但使用了新的PHP,须让Apache知道,得修改Apache的配置文件并重启Apache服务。
修改Apache配置文件/etc/httpd/conf/httpd.conf,使得文件中包含以下几行:
LoadModule php4_module modules/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php3 .php
同时注意把旧的php3的相应行注释掉,否则会出现冲突而使Apache重启失败。
重启Apache服务:
/etc/rc.d/init.d/httpd restart

5、 实例测试
再次按步骤0的说明检查当前状态,我已经看到,PHP改成了新的版本号,GD库也同时支持GIF和JPEG了。
但我还是想用实例来测试一下,这个例子的功能是读取一个gif文件,生成缩图,然后保存为另一个jpg文件。文件create-thumb.php的内容如下:
<?
function CreateThumbnail($srcFile, $dstFile, $dstW, $dstH)
{
$data = GetImageSize($srcFile,&$info);
switch ($data[2]) {
case 1:
$im = @ImageCreateFromGIF($srcFile);
break;
case 2:
$im = @ImageCreateFromJPEG($srcFile);
break;
case 3:
$im = @ImageCreateFromPNG($srcFile);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);
if ($srcW <= $dstW && $srcH <= $dstH)
ImageJPEG($im,$dstFile);
else
{
if(($srcW / $srcH) > ($dstW / $dstH))
$dstH = $dstW * $srcH / $srcW;
else
$dstW = $dstH * $srcW / $srcH;
$ni=ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
ImageJPEG($ni,$dstFile);
}
}
CreateThumbnail("./test.gif", "./test-tn.jpg", 80, 80);
?>
把该文件放于Apahce的文档目录下(/etc/httpd/html),同时把测试用的图像文件test.gif也放于该目录下,然后用浏览器打开该php文件(我的hostname为zhangzh):
http://zhangzh/create-thumb.php
没出错信息。再看Apahce的文档目录(/etc/httpd/html),多了一个缩图文件test-tn.jpg。

大功告成,班师回朝。

时间: 2024-09-20 07:53:49

配置PHP使之能同时支持GIF和JPEG_php基础的相关文章

jira 如何配置工作流使所有子任务都关闭之后主任务才能关闭?

问题描述 jira 如何配置工作流使所有子任务都关闭之后主任务才能关闭? jira 如何配置工作流 才能使所有子任务都关闭之后 主任务才能关闭?

larbin-Larbin 如何配置,使其只爬某一方面的东西,比如运动方面。

问题描述 Larbin 如何配置,使其只爬某一方面的东西,比如运动方面. Larbin 如何配置,使其只爬某一方面的东西,比如运动方面.还有,怎么使爬出的文件转换为html格式.

配置Grunt的Task时通配符支持和动态生成文件名问题_javascript技巧

copy: { // 这是Task里的其中一个Target dests: { expand: true, cwd: '<%=config.app%>/newFolder', src: ['**/{a*,b*}.html'], dest: '<%=config.dist%>/newFolder', ext: ".shtml", extDot: "first", flatten:true, //去掉中间上当,下面的rename可以再找回来 ren

如何配置服务器使其定时获取。。

问题描述 有没有朋友做过:在服务器上定时运行获取其他网站内容,并写入数据库的程序?目前用正则表达式能够达到目的,但是不知道如何配置服务器使其定时获取..望高手指点..PS:虚拟空间是购买的网上空间. 解决方案 解决方案二:你看下这个你就明白了.http://zhidao.baidu.com/question/2705101.html

如何使SQL Server数据库支持XML

如果你在IT业工作,那么你很可能听说过XML:但如果你的工作主要与SQL Server有关,那么你可能并没有直接运用过XML.XML已经是Web编程环境中的普遍的数据格式了,而且它也是.NET Framework中主要的底层技术之一.SQL Server以两种方式来支持XML:通过SQL Server本身的功能,以及通过发布称为SQLXML的额外的功能.SQLXML扩展了SQL Server,并提供了XML兼容性. SQL Server支持XML就意味着,我们可以更有效地更新和读取数据了:我们不

ubuntu 12.04 apt-get安装配置阿里云OCS的php支持

之前介绍了centos/redhat下如何配置ocs的PHP环境支持,ubuntu下阿里云官方暂未提供相关帮助文档,ubuntu下模块名称不尽相同,所以本文介绍一下ubuntu12.04下如何配置环境来支持ocs服务,主要是sasl的配置 以下操作均为阿里云服务器操作实录 首先,还是先配置一下高大上的阿里云镜像源 1 vim /etc/apt/source.list 在最前面添加一下内容 01 deb http://mirrors.aliyun.com/ubuntu/ precise main

在Windows的Apache服务器上配置对PHP和CGI的支持_Linux

现在有越来越多的个人主页站长需要了解如何如何在windows系统下配置自己的php,cgi服务器,以方便本地调试cgi和php的程序. 我们可以用Apache(windows版)来一次搞定:以下由我自己整理的关于在单机Windows环境下的安装和配置 Apache Server 的文章.假如您正在 Windows 单机环境下测试自己的网站,建议您参考一下. 主要包括:安装和配置 Apache Server:使用 Perl CGI 脚本:使用 PHP 脚本. --部分内容参考<Apache Ser

发布网站,如何配置可以使访问域名即可访问主页

问题描述 假设--IP地址为:168.92.0.1域名为:www.aaa.com.cn网站web项目名称为:abc默认网页为:index.jsp服务器为:tomcat,端口号是8080(这个web项目必须在tomcat服务器下运行)--现在域名和IP地址已经绑定并且解析,那么如下url地址访问等价:168.92.0.1:8080/abc/index.jspwww.aaa.com.cn:8080/abc/index.jsp可是,不能每次访问主要都通过这么长的地址访问啊!所以想通过www.aaa.c

nginx配置免费的ssl证书,支持https安全访问

免费ssl证书申请 到 http://www.wosign.com/Products/free_SSL.htm 申请免费的SSL证书. 下载www.iamle.com.zip文件,解压文件,找到for Nginx.zip解压,得到2个文件 1_www.iamle.com_bundle.crt ,2_www.iamle.com.key 改个名字www.iamle.com.crt,www.iamle.com.key传到服务器上备用 Nginx配置SSL证书部署https支持 找到对应的server