0

我有以下用于在网页中显示验证码的 php 脚本,验证码在我的本地 apache 服务器中正确显示,但是当我上传到虚拟主机服务器时,我收到如下所述的错误,请帮助

<?php
session_start();

$str = "";
$length = 0;
for ($i = 0; $i < 6; $i++) {
    // these numbers represent ASCII table (small letters)
    $str .= chr(rand(97, 122));
}

//md5 letters and saving them to session
$letters = md5($str);
$_SESSION['letters'] = $letters;

//determine width and height for our image and create it
$imgW = 150;
$imgH = 50;
$image = imagecreatetruecolor($imgW, $imgH);

//setup background color and border color
$backgr_col = imagecolorallocate($image, 238,239,239);
$border_col = imagecolorallocate($image, 208,208,208);

//let's choose color in range of purple color
$text_col = imagecolorallocate($image, rand(70,90),rand(50,70),rand(120,140));

//now fill rectangle and draw border
imagefilledrectangle($image, 0, 0, $imgW, $imgH, $backgr_col);
imagerectangle($image, 0, 0, $imgW-1, $imgH-1, $border_col);

//save fonts in same folder where you PHP captcha script is
//name these fonts by numbers from 1 to 3
//we shall choose different font each time
$fn = rand(1,3);
$font = $fn . ".ttf";

//setup captcha letter size and angle of captcha letters
$font_size = $imgH / 2.0;
$angle = rand(-15,15);
$box = imagettfbbox($font_size, $angle, $font, $str);
$x = (int)($imgW - $box[4]) / 2;
$y = (int)($imgH - $box[5]) / 2;
imagettftext($image, $font_size, $angle, $x, $y, $text_col, $font, $str);

//now we should output captcha image
header("Content-type: image/png");
imagepng($image);
imagedestroy ($image);
?>

错误是

Error: Image corrupt or truncated: http://url/captcha.php
Source File: http://url/captcha.php
4

1 回答 1

5

我遇到了一个问题,即使用 CAPTCHA(使用 imagepng())在一台机器上工作,但在远程服务器上却不行。我在十六进制编辑器中检查了 PNG 文件,发现前 4 个字节中有一个额外的 0D0A。我在 imagepng() 之前调用了 ob_clean(),问题解决了。

于 2012-10-30T13:03:51.387 回答