thinkphp中验证码,本地测试验证码显示,上传到服务器就不显示了,是啥问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp中验证码,本地测试验证码显示,上传到服务器就不显示了,是啥问题相关的知识,希望对你有一定的参考价值。

验证码:

html 页面:

求大神指教。

这个问题建议你查询一下php带的GD库有没有打开,Windows的话看下dll那块,Apache的看下mod那块,如果有这个dll或者so,去php.ini里面看下gd相关的dll或者so有没有被启用就好了,关了就开起来,如果开起来还是没有好,那我建议你修改验证码方案,使用类似极验验证的解决方案,他是外置的,我之前的一个系统就是出现这个问题,后来直接干了一个极验验证上去就好了,别浪费太多时间在一个验证码上。追问

配置文件我看了,是开启的,之前我也是这样写的,用的主机屋的虚拟主机,是可以的,这次是用的腾讯云,不知道为啥不行了,基本功能都写完了,上线的时候出现的问题,至少这次还是要搞明白,不然下次遇到这样的问题还是不会,那就尴尬了!

参考技术A 可能是PHP的GD库有没有打开,但是也有可能是项目文件的编码出现了问题,我遇到同样的问题,我把文件上传到服务器,然后用WinScp连接服务器,用WinScp自带的编辑器修改过代码,导致原来的文件编码由无bom的utf-8编码变成了有bom的utf-8编码。参考http://jingyan.baidu.com/article/c275f6ba241e4ee33c756710.html完美解决了问题

Thinkphp 验证码文件上传

一、验证码

 

验证码参数

例题:登录时验证下验证码

LoginController.class.php

<?php
namespace Home\\Controller;
use Think\\Controller;
class LoginController extends Controller
{
    public function Login()
    {
        if(empty($_POST))
        {
            $this->display();    
        }    
        else
        {
            //判断验证码是否正确
            $code = $_POST["yzm"];//用户输入的验证码的值
            $verify = new \\Think\\Verify(); //生成验证码 
            if($verify->check($code))
            {
                if($_POST["uid"]!="")
                {
                    $model = D("users");        
        
                    $uid = $_POST["uid"];
                    $pwd = $_POST["pwd"];
                    
                    $attr = $model->field("Pwd")->find($uid);
                    //echo $attr["pwd"];
                    
                    if($pwd == $attr["pwd"])
                    {
                        session("uid",$uid);
                        $this->success("登录成功","Main");
                    }
                    else
                    {
                        $this->error("登录失败");    
                    }
                }
                else
                {
                    $this->error("登录失败");    
                }
            
            }
            else
            {
                $this->error("验证码错误");    
            }
        }
    }
    
    //生成验证码的操作
    public function yzm()
    {
        $config =    array(   
        \'fontSize\'    =>    30,    // 验证码字体大小    
        \'length\'      =>    5,     // 验证码位数 
        //\'useNoise\'    =>    false, // 关闭验证码杂点
        \'imageW\'  => 200,//宽度
        \'imageH\'  => 100,//高度
        //\'useZh\' => true,//中文验证码
        //\'fontttf\' => \'Arvo-Regular.ttf\',//指定验证码字体
        );
         
        $Verify = new \\Think\\Verify($config);
        //$Verify->fontttf = \'7.ttf\';  // 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
        $Verify->entry();    
    }
    
View Code

Login.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="../../../../Public/four/llx/js/jquery-1.3.2.js"></script>
</head>

<body>
<h1>登录</h1>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<div>验证码:<input type="text" name="yzm" /><br />
<img id="yzm" src="__CONTROLLER__/yzm" /></div>
<input type="submit" value="登录" />

</form>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
    $("#yzm").click(function(){
        //点击图片验证码改变
        $(this).attr("src","__CONTROLLER__/yzm");
        
        })
});
</script>
View Code

           

二、文件上传

上传参数

每个文件信息又是一个记录了下面信息的数组,包括:

 

//文件上传
    public function ShangChuan()
    {
         if(empty($_FILES))
         {
             $this->display();     
         }
         else
         {
              $upload = new \\Think\\Upload();// 实例化上传类
              $upload->maxSize = 3145728 ;// 设置附件上传大小
              $upload->exts = array(\'jpg\', \'gif\', \'png\', \'jpeg\');// 设置附件上传类型
            
              //$upload->mimes = \'\';
              $upload->rootPath = \'./Public/\';
              $upload->savePath = \'Uploads/\'; // 设置附件上传目录
              $upload->saveName = \'\';//保持上传文件名不变

              
              // 上传文件   
              $info = $upload->upload();
              var_dump($info);
              
              if(!$info)
              {
                   $this->error($upload->getError());
              }
              else
              {
                  // 上传成功 获取上传文件信息
                  foreach($info as $file)
                  {        
                          $url=$file[\'savepath\'].$file[\'savename\'];
                          echo $url;
                          $this->assign("url",$url);
                            $this->display();
                           //$this->success(\'上传成功!\');
                  }
              }

         }    
    }
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传</title>
</head>

<body>
<form action="__ACTION__" enctype="multipart/form-data" method="post" >

<input type="file" name="photo" />
<input type="submit" value="提交" >

</form>
</body>
</html>

以上是关于thinkphp中验证码,本地测试验证码显示,上传到服务器就不显示了,是啥问题的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp中session跨域问题

Thinkphp 验证码文件上传

ThinkPhp框架:验证码功能

6月19 使用tp框架生成验证码及文件上传

ThinkPHP3验证码文件上传缩略图分页(自定义工具类session和cookie)

Thinkphp6中间件引起验证码不显示?