猿问

php验证码生成图像失败,在header前加上ob_clean()能正确输出,为什么呢?代码如下


<?php 

session_start();

require'string.func.php';


$width = 80;

$height=20;

$image = imagecreatetruecolor ( $width, $height );

$white = imagecolorallocate ( $image, 255, 255, 255 );

$black = imagecolorallocate ( $image, 0, 0, 0 );

imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );


$type=3 ;

$length=6;

$chars =buildRandomString($type,$length);

$sess_name="verify";

$_SESSION [$sess_name] = $chars; 

$fontfiles=array("FZLTCXHJW.TTF","simfang.ttf","simhei.ttf");


  for($i = 0; $i < $length; $i++) {

$size = mt_rand ( 14, 18 );

$angle = mt_rand ( - 15, 15 );

$x = 5 + $i * $size;

$y = mt_rand ( 20, 26 );

$fontfile = "../fons/" . $fontfiles [mt_rand ( 0, count ( $fontfiles ) - 1 )];

$color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );

$text = substr ( $chars, $i, 1 );

imagettftext ( $image, $size, $angle, $x, $y, $color, $fontfile, $text );

}  

ob_clean();

header ( "content-type:image/gif" );

imagegif ( $image );

imagedestroy ( $image ); 


qq_雨月残寒_0
浏览 2759回答 3
3回答

hxh_kylin

ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。If you work on an extremely large project with a lot of source and required files, like myself, you will be well-advised to always clear the output buffer prior to creating an image in php.

qq_青枣工作室_0

可能是你的<?php 前面有空格或者空行之类的
随时随地看视频慕课网APP
我要回答