ホームページ  >  記事  >  バックエンド開発  >  PHP検証コードの画像が表示されない時の解決策

PHP検証コードの画像が表示されない時の解決策

WBOY
WBOYオリジナル
2016-06-13 12:20:021130ブラウズ

php 検証コードの画像が表示できません
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)];
}
}
//背景を生成
プライベート関数 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;$icodelen;$i ) {
$this->fontcolor = imagecolorallocate($this-> ;img,mt_rand(0,156),mt_rand (0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$ i mt_rand(1,5),$ this->高さ / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
}
}
//ラインを生成、Snowflake
プライベート関数 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->高さ ),mt_rand(0,$this->幅),mt_rand(0,$this->高さ),$color);
}
//スノーフレーク
for ($i=0; $i<100;$i ) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->幅),mt_rand(0,$this->高さ),'*',$color);
}
}
//出力
プライベート関数 outPut() {
header('Content-type:image/png');
imagepng($this->img );
imagedestroy($this ->img);
}
//外部で生成
public function doimg() {
$this->createBg();
$this->createCode();
$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();
//まず第一にページ上 Open session,
//error_reporting(2047);
session_destroy();
//毎回新しいセッション値を取得できるようにセッションを削除します;
//効果セッションの使い方も良いですね とても便利です
?>


セッション画像検証例


< ;body>


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


< ;p>
確認コード:






// Print 前のセッション;
echo "前のセッション:".$_SESSION["authnum_session"]."
";
$validate="";
if(isset($_POST["validate"])){
$validate=$_POST["validate"];
echo "今入力した内容は次のとおりです: ".$_POST["validate"]
Status:";
if($validate!=$_SESSION["authnum_session"]){
//セッション値がユーザーが入力した確認コードと一致するかどうかを判断します;
echo "入力が正しくありません";
}else{
echo "確認済み";
}
}
?>
初心者は専門家に答えを求めます
-----ソリューションのアイデア--------------------- -
captcha.php を個別に実行して確認します

1. captcha.php に BOM ヘッダーがないことを確認します
2. フォント ファイルが実際に存在することを確認します
------ 解決策 ------------------------
2 日前に偶然このコードを見てデバッグしましたそれ。 。それはフォントパスの問題であるはずです
'/font/elephant.ttf

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。