win2003 thinkphp IIS6 php5.2 验证码乱码

来源:互联网 发布:mac什么游戏 编辑:程序博客网 时间:2024/06/01 07:21

配置:win2003   thinkphp  IIS6 php5.2 验证码乱码

说明:仅供参考



当遇到这样的问题都会感到很奇怪,本地是好的为什么放到服务器上就乱码了,或者从这台服务器换到另外一台服务器就乱码了,

乱码效果:

用tp自带的类生成验证码,主要用到Image.class.php 与 String.class.php

1:我们单独把Image.class.php 与 String.class.php 拉出来在服务器上做个测试,看是否能正常生成验证码,

测试结果是正常的,说明乱码与Image.class.php 和 String.class.php 无关


2:然后我们去测试正常与不正常的差别<curl 访问查看信息大笑同学提醒的>





3:发现头部信息异常

import("ORG.Util.Image");Image::buildImageVerify(4);这是我调用生成验证码方式,我们继续查看头部信息是哪里定义的在Image.class.php 找到输出方法 static function output($im, $type='png', $filename='') {        header("Content-type: image/" . $type);        $ImageFun = 'image' . $type;        if (empty($filename)) {            $ImageFun($im);        } else {            $ImageFun($im, $filename);        }        imagedestroy($im);        exit();    }header("Content-type: image/" . $type); 没有生效再尝试在方法下添加header('Location: http://www.baidu.com/');根本没有跳转 最终目标订到header("Content-type: image/" . $type);没有生效,输出没有定义是图片类型,所以乱码,4:解决@1一般遇到这样的问题都是查看验证码输出前是不是有别的输出,@2查看文件编码,@3是否存在BOM其实很多都是存在BOM,只是我们不易发现,当我尝试把debug关闭的时候刷新几下,居然好了....重复测试几次debug关闭正常 开启乱码这就好办,肯定是当debug开启的时候,配置数据是从加载的文件里面读取的,要读取数据的文件里面存在BOM,debug关闭的时候配置数据是从~runtime.php里面读取的,不再去加载文件里读取,所以不存在BOM我们就去查找~runtime.php加载了哪些文件数据信息最后找到common.php 下面存在BOM <容易犯的错误:经常会去<?php 前面去看有没有BOM>例如:



0 0