win2003 thinkphp IIS6 php5.2 验证码乱码

配置: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值