• 技术文章 >后端开发 >PHP问题

    php版本低不显示验证码怎么办

    藏色散人藏色散人2021-09-06 09:28:40原创79

    php版本低不显示验证码的解决办法:1、安装php5-gd所需的依赖;2、创建一个clean.php文件在项目根目录下;3、清除bom即可。

    本文操作环境:windows7系统、PHP5版,DELL G3电脑

    php版本低不显示验证码怎么办?

    PHP5验证码无法显示,GD库正常安装也无法显示的解决方法

    自己是做JAVA的,同时也维护了一个直接接手的PHP项目,对PHP是零基础,做了项目的服务器迁移,域名加了https,最后检查能正常访问,细的功能没有完全测试。

    突然有一天被投诉注册模块的验证码没办法正常显示(暂时去掉之后进入后台管理模块发现图片上传功能也不正常,估计都是一个问题)。于是就开始网上长达4天间断性寻找解决办法的路程。

    其实一般性情况的解决很容易就能找到,一些关键词就是php-gd、php-fpm(本人配置的是nginx)、php.ini、缓存清除。但是debian系统,依赖负责到无法想象,并且每个版本的依赖名还不一样,而当前系统本身又是生产环境服务器,又存在了各种版本的依赖,总之就是头大。

    最终在尝试了无数个依赖源,依赖的更新之后还是成功装上了php5-gd所需的依赖。终于phpinfo中也显示除了GD版本信息及支持的图片格式,然而,验证码依然无法显示。。。。。。

    在尝试无数搜索关键词之后,"php5装了gd也不显示验证码"终于搜索到了一个帖子,里面提到了BOM头,这一点就明白过来,因为在用crt远程登录服务器编辑一些文件的时候也会有这个BOM头的情况,于是创建一个clean.php文件在项目根目录下,

    粘贴如下代码

         <?php 
        /*清除bom*/
        if(isset($_GET['dir'])){ 
            $basedir=$_GET['dir']; 
        }else{ 
            $basedir = '.'; 
        }   
        $auto = 1;   
        checkdir($basedir); 
        function checkdir($basedir){ 
            if($dh = opendir($basedir)){ 
                while(($file = readdir($dh)) !== false){ 
                    if($file != '.' && $file != '..'){ 
                        if(!is_dir($basedir."/".$file)){ 
                            echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; 
                        }else{ 
                            $dirname = $basedir."/".$file; 
                            checkdir($dirname); 
                        } 
                    } 
                }//end while 
            closedir($dh); 
            }//end if($dh 
        }//end function 
        function checkBOM($filename){ 
            global $auto; 
            $contents = file_get_contents($filename); 
            $charset[1] = substr($contents, 0, 1);   
            $charset[2] = substr($contents, 1, 1);   
            $charset[3] = substr($contents, 2, 1);   
            if(ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191){ 
                if($auto == 1){ 
                    $rest = substr($contents, 3); 
                    rewrite ($filename, $rest); 
                    return "<font color=red>BOM found, automatically removed.</font>"; 
                }else{ 
                    return ("<font color=red>BOM found.</font>"); 
                } 
            }   
            else return ("BOM Not Found."); 
        }//end function 
        function rewrite($filename, $data){ 
            $filenum = fopen($filename, "w"); 
            flock($filenum, LOCK_EX); 
            fwrite($filenum, $data); 
            fclose($filenum); 
        }
        ?>

    直接浏览器访问https://url/clean.php

    有问题就会看到很多这样的日志,接着重新访问验证码页面

    正常访问~

    上传图片的问题其实是因为域名改了https而上传模块的配置没改影响到的,加了https也正常了

    推荐学习:《PHP视频教程

    以上就是php版本低不显示验证码怎么办的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:PHP curl_init用法是什么 下一篇:php mysql怎么实现修改记录
    线上培训班

    相关文章推荐

    • 如何用 php实现验证码• 一分钟学会PHP中关于封装验证码(上)• 一分钟学会PHP中关于封装验证码(下)• php5.3 验证码不显示怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网