我做了一个验证码功能的东西,在我本地机器上运行没有问题,可是放到服务器上这个程序返回到浏览器的是一个红叉 很奇怪的问题服务器的gd库没有问题但是我指定了imagepng 的第二个参数后能够生成临时文件,但是不指定第二个参数直接输出就有问题了 而且没有任何报错信息,就是输出不了图片希望高手 指点~代码如下
<?phprequire_once 'include/common.inc.php';  Header("Content-type:  image/png");try{

//用于验证码的字符,省掉了容易看错的字符 例如 2 和 Z  l 和 1 等  
$codeChar = array('3','4','5','6','7','8','9','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y');$vCodeStr = '';
$vCode = array();
//生成验证码
for($i=0;$i<4;$i++){
$vIndex = rand(0,count($codeChar)-1);
$vCodeStr .= $codeChar[$vIndex];
array_push($vCode,$codeChar[$vIndex]);
}//将验证码和创建时间写入session
$_SESSION['vcode'] = $vCodeStr;
$_SESSION['vtime'] = time();
//创建验证码图片
$img = imagecreate(85,23);imagecolorallocate($img,255,255,255);//绘制验证码
for($i = 0;$i < 4;$i++){
$fgcolor = imagecolorallocate($img,rand(0,150),rand(0,150),rand(0,150));
imagechar($img,10,$i * 20 + 5,3,$vCode[$i],$fgcolor);
}//干扰信息
for($i =0;$i < 200;$i++){
imagesetpixel($img,rand(0,85),rand(0,23),rand(0,255));
if($i % 50 == 0){
imageline($img,rand(0,85),rand(0,23),rand(0,85),rand(0,23),rand(0,255));
}
}//输出图片
imagepng($img);
imagedestroy($img);
}catch(Exception $ex){
echo $ex->getMessage();
}
die();
?>

解决方案 »

  1.   

    先检查服务器php.ini中extension=php_gd2.dll
      

  2.   

    看来程序是对的 
    在验证码页面里,不要加 require_once 'include/common.inc.php';  这个了,没用 ..直接在头部 session_start();
      

  3.   

    整理了一下session_start();header("Content-type: image/png");try{
    //用于验证码的字符,省掉了容易看错的字符 例如 2 和 Z l 
    $codeChar = array('3','4','5','6','7','8','9','A','B','C','D','E','F',  'G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y'); $vCodeStr = '';$vCode = array();
    //生成验证码
    for($i=0;$i<4;$i++)

    $vIndex = rand(0,count($codeChar)-1); 
    $vCodeStr .= $codeChar[$vIndex]; 
    array_push($vCode,$codeChar[$vIndex]); 

    //将验证码和创建时间写入sessi
    $_SESSION['vcode'] = $vCodeStr; 
    $_SESSION['vtime'] = time(); 
    //创建验证码图片
    $img = imagecreate(85,23); 
    imagecolorallocate($img,255,255,255); 
    //绘制验证码
    for($i = 0;$i < 4;$i++)

    $fgcolor = imagecolorallocate($img,rand(0,150),rand(0,150),rand(0,150)); 
    imagechar($img,10,$i * 20 + 5,3,$vCode[$i],$fgcolor); 

    //干扰信息
    for($i =0;$i < 200;$i++)

    imagesetpixel($img,rand(0,85),rand(0,23),rand(0,255));
    if($i % 50 == 0)

    imageline($img,rand(0,85),rand(0,23),rand(0,85),rand(0,23),rand(0,255)); 


    //输出图片
    imagepng($img); 
    imagedestroy($img);
    }
    catch(Exception $ex)

        echo $ex->getMessage(); 

    die();
      

  4.   

    去掉require_once 'include/common.inc.php'; 以后,
    本地测试没有任何问题.在服务器测试,首先测试xxx/xx.php,看有没有图片输出.很有可以是因为session_start();header()等类似函数之前有输出了.