本帖最后由 北回归线 于 2017-4-6 16:05 编辑
一、问题现象;
最近在给公司部署一套某公司系统的时候遇到了一个问题,上传了附件后无法下载,上传英文的附件可以正常下载。于是网上查了下说是某公司的一个bug,某公司不支持GBK的编码URL导致。
二、解决方案; 相信很多人都可能遇到这样的问题,起初安装网上的办法试了下,编译的时候出现了各种问题,无从下手啊!今天总算搞定了这个问题,所有这里给大家分享下,希望对大家有帮助。 我的服务器环境:Centos6.5+某公司2.2.15+mysql+php
1、下载mod_encoding的源码包;
apache2.2.x-mod_encoding-master.zip
(255.01 KB, 下载次数: 8)
2、解压mod_encoding的源码包; [root@ps mod]# tar -xzf mod_encoding-20021209.tar.gz
[root@ps mod]# ll
总用量 288
drwxr-xr-x 3 1002 users 4096 12月 9 2002 mod_encoding-20021209
3、使用mod_encoding.c.apache2.20040616文件替换源代码包中的mod_encoding.c文件; [root@ps mod]# cd mod_encoding-20021209
[root@ps mod_encoding-20021209]# cp ../mod_encoding.c.apache2.20040616 mod_encoding.c
4、编译iconv-hook; [root@ps mod_encoding-20021209]# cd lib //进入lib目录
[root@ps lib]# ./configure --prefix=/usr //检查软件安装环境
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
.................... [root@ps lib]# make //编译后将会生成文件
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c iconv_hook.c
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -Wp,-MD,.deps/iconv_hook.pp -c iconv_hook.c -fPIC -DPIC -o .libs/iconv_hook.lo
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -Wp,-MD,.deps/iconv_hook.pp -c iconv_hook.c -o iconv_hook.o >/dev/null 2>&1
mv -f .libs/iconv_hook.lo iconv_hook.lo
..................
5、安装某公司的apxs模块拓展工具 [root@ps lib]# yum install httpd-devel.x86_64
6、编译并安装mod_encoding.so模块
a、在编译安装前,先执行补丁,否则下面的编译可能会报错,如果还是依然报错,建议多执行几次补丁操作试试: [root@ps mod_encoding-20021209]# patch -p0 < ../mod_encoding.c-apache2.2-20060520.patch
patching file mod_encoding.c
[root@ps mod_encoding-20021209]#
[root@ps mod_encoding-20021209]# patch -p0 < ../mod_encoding.c-apache2.2-20060520.patch
patching file mod_encoding.c
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
5 out of 5 hunks ignored -- saving rejects to file mod_encoding.c.rej
b、检查软件的部署环境 [root@ps mod_encoding-20021209]# ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/include
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... missing
checking for working autoconf... missing c、编译并生成文件 [root@ps mod_encoding-20021209]# make
/usr/sbin/apxs -c -I/usr/include -liconv_hook mod_encoding.c
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include -c -o mod_encoding.lo mod_encoding.c && touch mod_encoding.slo
mod_encoding.c:362: 警告:从不兼容的指针类型初始化
mod_encoding.c:366: 警告:从不兼容的指针类型初始化
mod_encoding.c:370: 警告:从不兼容的指针类型初始化
mod_encoding.c:374: 警告:从不兼容的指针类型初始化
mod_encoding.c:378: 警告:从不兼容的指针类型初始化
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_encoding.la -liconv_hook -rpath /usr/lib64/httpd/modules -module -avoid-version mod_encoding.lo
[root@ps mod_encoding-20021209]# d、查看生成的文件 [root@ps mod_encoding-20021209]# ll
总用量 288
-rw-r--r-- 1 root users 17548 4月 6 14:45 mod_encoding.c
-rw-r--r-- 1 root users 17548 4月 6 14:44 mod_encoding.c.orig
-rw-r--r-- 1 root root 3591 4月 6 14:45 mod_encoding.c.rej
-rw-r--r-- 1 root root 968 4月 6 14:45 mod_encoding.la
-rw-r--r-- 1 root root 291 4月 6 14:45 mod_encoding.lo
-rw-r--r-- 1 root root 49352 4月 6 14:45 mod_encoding.o
-rw-r--r-- 1 root root 0 4月 6 14:45 mod_encoding.slo e、生成最终的某公司模块文件mod_encoding.so文件 [root@ps mod_encoding-20021209]# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook
7、安装并应用模块;
a、将生成的模块文件复制到某公司模块目录 cp mod_encoding.so /etc/httpd/modules/
b、修改某公司配置文件 LoadModule encoding_module modules/mod_encoding.so
<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding GBK
DefaultClientEncoding UTF-8 GBK GB2312
</IfModule>
c、重启某公司服务
|