请问?
为什么WAMP里PHP开户了display errors后不能创建图片,以至于不能创建验证码。关掉display errors后,又能创建图片了。

解决方案 »

  1.   

    因为在创建图片的PHP程序中本身有错误存在。先别输出图片,看看报什么错误
      

  2.   


    没有报错的哦。以下的验证码的源码。
    function _code($width=75,$height=25,$codelen=4,$border=0,$charset='NUM'){
    //$width=75(默认)
    //$height=25(默认)
    //$codelen=4(默认)
    //$border=0(默认)
    //$charset=[NUM,CN,EN]

    $_SESSION['code']='';
    //中英文数字
    $chinese="的一是在不了有和人这中大
    为上个国我以要他时来用们生到作地于出
    就分对成会可主发年动同工也能下过子说产种面
    而方后多定行学法所民得经十三之进着等部度家电力里
    如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应
    开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看
    原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直
    题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知
    较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门
    即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己
    美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名
    确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算
    低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便
    团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养
    易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严"; //总共498个字符

    $chinese=preg_replace('/\n|\t|\r/', '', $chinese); //用正则过滤掉字符中的\t\r\n

    $chinese=str_split($chinese,3); //将字符串转换为数组

    $english="abcdefjhijklmnopqrstuvwxyz"; //26个字母

    $english=str_split($english); //将字符串转换为数组



    $img=imagecreatetruecolor($width, $height); //创建图片

    //选择白色
    $white=imagecolorallocate($img, 255, 255, 255);

    //填充

    imagefill($img, 0, 0, $white);

    //黑色
    if ($border==1){
    $black = imagecolorallocate($img, 0, 0, 0);

    imagerectangle($img, 0, 0, $width-1, $height-1, $black);
    }
    //随机画出6个线条
    for ($i=0;$i<6;$i++){
    $randcolor=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), $randcolor);

    }

    //随机画雪花
    for($i=0;$i<50;$i++){
    $randcolor=imagecolorallocate($img, mt_rand(200, 255),  mt_rand(200, 255),  mt_rand(200, 255));
    imagestring($img, mt_rand(3, 5), mt_rand(0, $width-5), mt_rand(0, $height-5), '*', $randcolor);
    }

    //输出验证码
    for($i=0;$i<$codelen;$i++){
    switch ($charset)
    {
    //数字
    case NUM:
    $text=dechex(mt_rand(0, 15));
    $_SESSION['code'].=$text;
    $randcolor=imagecolorallocate($img, mt_rand(0, 100),  mt_rand(0, 100),  mt_rand(0, 150));
    imagettftext($img, 15, mt_rand(0, 60), $i*$width/$codelen+10, $height-6, $randcolor,'simhei.ttf' ,$text);
    break;

    //中文
    case CN:
    $randcolor=imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 150));
    $text=$chinese[mt_rand(0, count($chinese))];
    $_SESSION['code'].=$text;
    imagettftext($img,12,mt_rand(0, 60),$i*$width/$codelen+5, mt_rand(15, 20)+5,$randcolor,'simhei.ttf',$text);
    break;

    //英文
    case EN:
    $randcolor=imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 150));
    $text=$english[mt_rand(0, count($english))];
    $_SESSION['code'].=$text; //生成随机英文
    imagettftext($img,19,mt_rand(0, 60),$i*$width/$codelen+5, mt_rand(15, 20)+5,$randcolor,'simhei.ttf',$text);
    break;
    }
    }
    //输出图片
    header("Content-type:image/png");
    imagepng($img);

    //销毁
    imagedestroy($img);

    }
      

  3.   

    每次用全局变量,都用isset检测一下。
    比如$sess=isset($_SESSION['mysession'])?$_SESSION['mysession']:"";
    对于图片,还要检测是否有BOM。
      

  4.   

    OK了,成功了。在用SWITCH里CASE后面的字符串加上''。
    谢谢各位的回答。谢谢!