ホームページ  >  記事  >  バックエンド開発  >  PHP検証コード画像が出力できない、解決方法

PHP検証コード画像が出力できない、解決方法

WBOY
WBOYオリジナル
2016-06-13 13:23:09866ブラウズ

PHP 検証コードの画像が出力できません
ファイル名 global_func.php

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
function _code(){
//运行验证码
    //随记码个数
    $_rnd_code=4;
    for($i=0;$i<$_rnd_code;$i++){
        $_nmsg.=dechex(mt_rand(0, 15));
    }
    //保存在session中
    $_SESSION['code']=$_nmsg;
    //长和高
    $_width=75;
    $_height=25;
    //创建一张图片
    $_img=imagecreatetruecolor($_width,$_height);
    //白色
    $_white=imagecolorallocate($_img, 255, 255, 255);
    //填充
    imagefill($_img, 0, 0, $_white);
    $_flag=false;
    if($_flag){
    //黑色,边框
        $_black=imagecolorallocate($_img, 0,0,0);
        imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
    }
    //画出6个线条
    for($i=0;$i<6;$i++){
        $_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
        imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
    }
    //随即雪花
    for($i;$i<100;$i++){
        $_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
        imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);    
    }
    //输出验证码
    for($i=0;$i<strlen($_SESSION['code']);$i++){
        $_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
        imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);    
    }
    //输出图像
    header('Content-Type:image/png');
    imagepng($_img);
    //销毁
    imagedestroy($_img);
}



ファイル global_func.php の下で関数 _code() を呼び出した場合;エラーは赤十字です。
code.php
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
_code();




これは code.php に直接書いたもので、そのまま使えます。
code.php
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    //随记码个数
    $_rnd_code=4;
    for($i=0;$i<$_rnd_code;$i++){
        $_nmsg.=dechex(mt_rand(0, 15));
    }
    //保存在session中
    $_SESSION['code']=$_nmsg;
    //长和高
    $_width=75;
    $_height=25;
    //创建一张图片
    $_img=imagecreatetruecolor($_width,$_height);
    //白色
    $_white=imagecolorallocate($_img, 255, 255, 255);
    //填充
    imagefill($_img, 0, 0, $_white);
    $_flag=false;
    if($_flag){
    //黑色,边框
        $_black=imagecolorallocate($_img, 0,0,0);
        imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
    }
    //画出6个线条
    for($i=0;$i<6;$i++){
        $_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
        imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
    }
    //随即雪花
    for($i;$i<100;$i++){
        $_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
        imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);    
    }
    //输出验证码
    for($i=0;$i<strlen($_SESSION['code']);$i++){
        $_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
        imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);    
    }
    //输出图像
    header('Content-Type:image/png');
    imagepng($_img);
    //销毁
    imagedestroy($_img);




この検証コードを関数にカプセル化せずに直接実行します。検証コードとすべてを使用できます。大丈夫です。
しかし、関数 _code() を使用すると、_code() を呼び出した後の HTML に赤い十字が表示されます。理由はわかりません


-----解決策---------
header('Content-Type:image/png'); が原因でしょうか?
BOM ヘッダーは、ブラウザーが期待するファイル タイプに影響します。
-----解決策---------
関数として書いても、と呼んでも問題ありません。

PHP コード
<?php
関数_コード(){
// 検証コードを実行する
}
?>
<br><font color="#e78608">------解決策---------------------- <div class="clear"></div></font>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。