首頁 >後端開發 >PHP問題 >php版本低不顯示驗證碼怎麼辦

php版本低不顯示驗證碼怎麼辦

藏色散人
藏色散人原創
2021-09-03 09:14:392251瀏覽

php版本低不顯示驗證碼的解決方法:1、安裝php5-gd所需的依賴;2、建立一個clean.php檔案在專案根目錄下;3、清除bom即可。

php版本低不顯示驗證碼怎麼辦

本文操作環境: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[&#39;dir&#39;])){ 
        $basedir=$_GET[&#39;dir&#39;]; 
    }else{ 
        $basedir = &#39;.&#39;; 
    }   
    $auto = 1;   
    checkdir($basedir); 
    function checkdir($basedir){ 
        if($dh = opendir($basedir)){ 
            while(($file = readdir($dh)) !== false){ 
                if($file != &#39;.&#39; && $file != &#39;..&#39;){ 
                    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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn