PHP認証コードの画像が表示されない

WBOY
リリース: 2016-06-23 13:34:29
オリジナル
1063 人が閲覧しました

ValidateCode.class.php コードは以下の通りです
//検証コード class
class ValidateCode {
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//ランダム係数
private $code;//検証コード
private $ codelen = 4;//検証コードの長さ
private $width = 130;//幅
private $height = 50;//高さ
private $img;//グラフィックリソースハンドル
private $font;//指定されたフォント
private $ fontsize = 20;//フォントサイズを指定
private $fontcolor;//フォントカラーを指定
//コンストラクターメソッドの初期化
public function __construct() {
$this->font = dirname(__FILE__).'/font/ elephant .ttf';//フォントパスは正しく書かれていなければ画像が表示されないことに注意してください
}
//ランダムコードを生成します
private function createCode() {
$_len = strlen($this-> charset)-1;
for ($i=0;$icodelen;$i++) {
$this->code .= $this->charset[mt_rand(0,$_len) ];
}
}
//背景を生成する
private function createBg() {
$this->img = imagecreatetruecolor($this->width, $this->height)
$color = imagecolorallocate($) this->img, mt_rand (157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0, $color); }
// テキストを生成
private function createFont() {
$_x = $this->width / $this->codelen;
for ($i=0;$i<$this- >codelen;$i++) {
$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img); ,$this->フォントサイズ,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->高さ / 1.4,$this->フォントカラー,$this->; font,$this-> code[$i]);
}
}
// 線と雪の結晶を生成する
private function createLine() {
// Line
for ($i=0;$i<6;$) i++) {
$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->) ;width),mt_rand(0 ,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//スノーフレーク
for ($i=0 ;$i<100;$i++) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); this->img,mt_rand (1,5),mt_rand(0,$this->幅),mt_rand(0,$this->高さ),'*',$color); //出力
プライベート関数outPut () {
header('Content-type:image/png')
imagedestroy($this->img); /外部で生成
public function doimg () {
$this->createBg();
$this->createLine();
$this->createFont();
$this->outPut ();
}
//検証コードを取得する
public function getCode() {
return strto lower($this->code)
}
}



captcha.phpコードは次のとおりです
session_start();
require './ValidateCode.class.php'; //最初にクラスをインクルードし、実際の状況に応じて実際のパスを変更します。
$_vc = new ValidateCode(); // オブジェクトをインスタンス化します
$_vc->doimg();
$_SESSION['authnum_session'] = $_vc->getCode();// 検証コードを SESSION に保存します



Index.php コードは次のとおりです
session_start();
//最初にセッションを開く必要があります
//error_reporting(2047);
session_destroy();
//セッションを削除して、毎回新しいセッション値を取得できるようにします。// seesion を使用するとうまく機能し、非常に便利です

セッション画像検証の例
#login p{
margin-top: 15px;
line-height: 20px;
font-weight: 太字
}
#login img{
}
フォーム {
margin-left:20px;


p>この例はセッション検証インスタンスです


検証コード:
;/img>



; ;
echo "前のセッション:".$_SESSION["authnum_session"]."
"
if(isset($_POST[") "])){
$validate=$_POST["validate"];
echo "今入力した内容は次のとおりです:".$_POST["validate"]."
ステータス:";
if($ validate !=$_SESSION["authnum_session"]){
//セッション値がユーザーが入力した検証コードと一致するかどうかを判断します
echo "不正な入力"; else {
echo "Passed Verification";
}
}
?>
初心者の方はマスターに答えを聞いてください



ディスカッションへの返信 (解決策)

操作後の画像

captcha.phpを別途実行して見てください

1. captcha.phpにBOMヘッダーがないことを確認してください
2. フォントファイルが実際に存在することを確認してください

2日前にたまたまこのコードを見て、それをデバッグしました。 。フォント パスの問題であるはずです
'/font/elephant.ttf

完了しました。ValidateCode.class.php と captcha.php は同時に BOM ヘッダーなしに変更されました。フォント ファイルにも注意してください

上の写真
でも、また気づいたことがあります。質問が 1 つあります。別の投稿を開きたくないので、誰か見てください

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート