Изображение, созданное с помощью PHP, не отображается - PullRequest
0 голосов
/ 12 мая 2010

что не так с моим кодом.

изображение не отображается в файле test2.php

Файл: test2.php:

<img src = "test.php" />

Файл: test.php

session_start();

$md5_hash = md5(rand(0,999)); 
$security_code = substr($md5_hash, 15, 5); 

$_SESSION["security_code"] = $security_code;

$width = 100;
$height = 20;
header("Content-type: image/png");

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

$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
$grey = ImageColorAllocate($image, 204, 204, 204);

ImageFill($image, 0, 0, $black); 

//Add randomly generated string in white to the image
ImageString($image, 3, 30, 3, $security_code, $white); 

//Throw in some lines to make it a little bit harder for any bots to break 
imageRectangle($image,0,0,$width-1,$height-1,$grey); 
imageline($image, 0, $height/2, $width, $height/2, $grey); 
imageline($image, $width/2, 0, $width/2, $height, $grey); 

imagepng($image);
imagedestroy($image);

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Код отлично работает здесь. Скорее всего, перед вашим <?php есть вывод, который приводит к сбою header () и выдает сообщение об ошибке - или у вас нет gd-lib.

PS: Это изображение не очень хорошая капча. Использование ReCAPTCHA , вероятно, было бы лучшим решением.

0 голосов
/ 12 мая 2010

Я думаю, что либо в вашем скрипте есть ошибка, которая приводит к сбою при выполнении, либо есть какой-то дополнительный вывод, который повреждает данные изображения. Это могут быть одиночные пробельные символы перед блоком PHP (приводящие к сбою header) или даже сообщения об ошибках PHP.

Попробуйте добавить обработку ошибок. Переместите вызов header прямо перед вызовом imagepng и проверьте, не отправлен ли еще заголовок HTTP (см. headers_sent):

if (!headers_sent()) {
    header("Content-type: image/png");
    imagepng($image);
} else {
    echo 'Internal Error';
}
imagedestroy($image);

А затем вызвать скрипт напрямую, чтобы увидеть вывод напрямую.

...