验证码类的问题

#1 xim

在表单中用代码alt="Not clear, click on change" style="cursor:pointer"/>可以出来效果
但用来实现时看不清楚,点击图片刷新就是出不来效果,
真是怪啊,下载http://bbs.speedphp.com/thread-25-1-2.html的verimg调试有用,但放入自己框架中就是没有效果不显示ob_clean和UTF8-BOM或空格等问题是不存在的啊。

2011-11-16 12:01:02

#2 jake

http://bbs.speedphp.com/redirect.php?goto=findpost&ptid=286&pid=1124&fromuid=1

2011-11-16 12:34:43

#3 xim

我就是用这个例子调试有用,但放到自己的案例中就没有用了,我唯一和他不同的就是:
我的controller文件夹中有两个文件夹admin、index。要使用认证类的控制器在admin中的main类中
class main extends spController{
...         
   function index(){
             $this->display("admin/form.html");
    }
       
   function verifyCode(){
        $image=spClass('CheckCode');
                $_SESSION['verify_code']=$image->show();
  }
...

form.html:



显示验证码


显示验证码


看不清楚,点击图片刷新


}


admin.php:// 载入配置与定义文件
require("config.php");
// 当前模块附加的配置
$spConfig['controller_path'] = APP_PATH.'/controller/admin/';
$spConfig['model_path'] = APP_PATH.'/model/'.basename(__FILE__,".php");
$spConfig['launch'] = array(
        'router_prefilter' => array(
        array('spAcl','maxcheck')                         // 开启强制的权限控制
        ),
);
$spConfig['ext'] = array(
        'spAcl' => array(                                         // acl扩展设置                 
        // 在acl中,设置无权限执行将lib_admin类的acljump函数
        'prompt' => array("lib_sysuser", "acljump"),
        ),
);
// 载入框架
require(SP_PATH."/init.php");
spRun();
?>

权限也给了

2011-11-16 14:54:51

#4 jake

差很远啊,例子是一个应用程序,你现在是多入口,也就是多个应用程序。

先看看
http://www.speedphp.com/release-dirs.html
这个,了解清楚多入口的使用。

问题应该是在<{spUrl c=main a=verifyCode}>这个显示上,因为是多入口,所以应该选对入口才行。
设置:
        'url' => array(
                'url_path_base' => 'admin的入口文件',
        ),

2011-11-16 15:30:02

#5 xim

我就是参考http://www.speedphp.com/release-dirs.html中的例子来的,其他的功能都有用,文件上传类也有用,现在加验证码类后,就没有用了。

2011-11-17 10:20:15

#6 jake

点击“看不清楚,点击图片刷新”之后怎么样

2011-11-17 10:21:46

#7 xim

我就是用这个例子调试有用,但放到自己的案例中就没有用了,我唯一和他不同的就是:
我的controller文件夹中有两个文件夹admin、index。要使用认证类的控制器在admin中的main类中
class main extends spController{
...         
   function index(){
             $this->display("admin/form.html");
    }
        
   function verifyCode(){
        $image=spClass('CheckCode');
                $_SESSION['verify_code']=$image->show();
  }
...

form.html:



显示验证码


显示验证码


看不清楚,点击图片刷新


}


admin.php:// 载入配置与定义文件
require("config.php");
// 当前模块附加的配置
$spConfig['controller_path'] = APP_PATH.'/controller/'.basename(__FILE__,".php");$spConfig['model_path'] = APP_PATH.'/model/'.basename(__FILE__,".php");$spConfig['launch'] = array(
        'router_prefilter' => array(
        array('spAcl','maxcheck')                         // 开启强制的权限控制
        ),
);
$spConfig['ext'] = array(
        'spAcl' => array(                                         // acl扩展设置                 
        // 在acl中,设置无权限执行将lib_admin类的acljump函数
        'prompt' => array("lib_sysuser", "acljump"),
        ),
);
// 载入框架
require(SP_PATH."/init.php");
spRun();
?>
其入口地址也改了啊

2011-11-17 10:24:13

#8 xim

class main extends spController{...         
   function index(){
             $this->display("admin/form.html");
    }
        
   function verifyCode(){
        $image=spClass('CheckCode');
                $_SESSION['verify_code']=$image->show();
                dump($_SESSION['verify_code']);
        break;
  }
...

form.html:



显示验证码


显示验证码



看不清楚,点击图片刷新
}


dump后在iframe中显示出来的是
�PNG IHDR4����PLTE���td�xvj{nny��l���y=��OayQ�϶xP����Hʴ@�?�ȝ,E�w� |X�Ąp��B�T�N��/`����k��j� ?B++�(D��Wj��I ���[��Å�!$ա�f5|����Pm�lU��t% J�!O���0v����9�~ �o�(>!'\� <�ʂ��y��,�DrIDAT8���Q� `��D�?YHR�\k���E� �E�W�zdT^,�J)g���1E�"��ך/"bW���d�Nq $/�+�`�&ASjr�i�Qe�~�!Q�̮LJ�L ���{%�� x^�IEND�B`�
A87F


乱码

2011-11-17 11:17:23

#9 jake

如果图片显示乱码,那么就是在图片显示之前,有BOM或者空格之类的。


$_SESSION['verify_code']=$image->show();
改成
ob_clean();ob_start();
$_SESSION['verify_code']=$image->show();

而且麻烦回答一下我上面的问题。

2011-11-17 11:51:45

#10 xim

真是不好意思,一下子没有注意你的问题了。点击“看不清楚,点击图片刷新”之后没有反应,现在我如果图片显示乱码,那么就是在图片显示之前,有BOM或者空格之类的。


$_SESSION['verify_code']=$image->show();
改成
ob_clean();ob_start();
$_SESSION['verify_code']=$image->show();
后效果还是没有,和上面8楼的显示一样,

看不清楚,点击图片刷新
}

在iframe里是乱码,后面的img中不显示。

...

2011-11-17 12:54:08

#11 xim

空格之类应该是没有啊,否则换为
Not clear, click on change
怎么就会显示?

2011-11-17 12:56:04

#12 jake

不要在图片显示的action里面再用dump之类的

function verifyCode(){
        $image=spClass('CheckCode');
        ob_clean();ob_start();
        $_SESSION['verify_code']=$image->show();
        exit(0);
  }

然后只用在img上面,不要用iframe

乱码并非不显示图片,而是把图片的二进制显示出来——这是因为图片的格式被空格或者BOM之类的破坏了。

在单独一个文件中,因为没有载入别的东西,所以会显示。上面你的代码里面有dump或者别的文件有空格或BOM,所以才会被破坏了二进制。这点是这样判断出来的。

而且在我给的例子里面是OK的,所以问题并不是出在框架或者图片类上,而是出在空格等方面。

2011-11-17 13:01:45

#13 xim

谢谢,空格一般如何检查呢?是哪里的空格呢

2011-11-17 16:42:55

#14 jake

谢谢,空格一般如何检查呢?是哪里的空格呢
xim 发表于 2011-11-17 16:42
看你载入的类(PHP文件),文件开头或者结束,有没有空格。

2011-11-17 17:42:23