php驗證碼和不能正常顯示解決方案
效果
?
檔案都放到了同一檔案夾下。
?
CreateImage.class.php
width=$width; $this->height=$height; $this->codenum=$codenum;}function outImg(){ //輸出頭 $this->outFileHeader(); //產生驗證碼 $this->createCode(); //產生圖片 $this->createImage(); //設定幹擾像素 $this->setDisturbColor(); //往圖片上寫驗證碼 $this->writeCheckCodeToImage(); imagepng($this->checkimage); imagedestroy($this->checkimage);}private function outFileHeader(){ header ('Content-type: image/png');}private function createCode(){ $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum));}private function createImage(){ $this->checkimage = @imagecreate($this->width,$this->height); $back = imagecolorallocate($this->checkimage,255,255,255); $border = imagecolorallocate($this->checkimage,0,0,0); imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底 imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border); // 黑色邊框}private function setDisturbColor(){ for ($i=0;$i<=200;$i++) {$this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255));imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor); }}private function writeCheckCodeToImage(){ for ($i=0;$i<=$this->codenum;$i++) {$bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255));$x = floor($this->width/$this->codenum)*$i;$y = rand(0,$this->height-15);imagechar ($this->checkimage, rand(5,8), $x, $y, $this->checkcode[$i], $bg_color); }}function __destruct(){ unset($this->width,$this->height,$this->codenum);}}
?
checks.php
?
?
index.php
?
rand函數的應用
?
************************************容易出現的問題*************
?
?
?
1.未開啟php_gd2.dll? 去php.ini將其前面的“ ;”去掉
2.上面的checks.php中
3.字元編碼改為統一的
4.最容易忽略的一點:
? 你本機上的環境是將報錯提示全部開啟的,所以在輸出時有系統的未定義提示資訊也跟著一起輸出了,這樣產生的圖片肯定就不正常了,方法有兩,在ValidationCode.php和checks.php檔案開頭加上ini_set('display_errors',?'Off');??就ok了
?
?
?
**********************************************************
?