<?php
//error_reporting(7);
session_start();//随机码的个数
$_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=0;$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);
?>上面那段代码是个验证码的源代码 运行时 浏览器确无法显示 然后我用error_reporting排错 发现是$_nmsg .= dechex(mt_rand(0,15)); 这句话错误 所以我加了个 @ 就可以正常显示验证码了但是这不是长久之计吧 我想知道究竟为什么错 错在哪里 请高手们帮忙看下 我刚学php没多久。

解决方案 »

  1.   

    //error_reporting(7);
    session_start();//随机码的个数
    $_rnd_code = 4;
    $_nmsg = '';  //先定义$_nmsg变量试试,不然在执行下面的循环时会报变量未定义的错误(Notice级别,
    //不过error_reporting(7)应该会忽略Notice级别的错误信息,不知道你在调试的时候报的是什么错误//创建随机码
    for ($i=0;$i<$_rnd_code;$i++) $_nmsg .= dechex(mt_rand(0,15));
      

  2.   


    Undefined variable: _nmsg
    如1楼