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中文網其他相關文章!