2013-08-04 2 views
0

Я создал простой генератор искаженным, но не будет отображаться искаженным-изображение:PHP: Создание простого Captcha

index.php:

<?php 
session_start(); 
$_SESSION['captcha'] = rand(1000, 9999); 
?> 

<img src="generator.inc.php" /> 

generator.inc.php:

<?php 
session_start(); 
header('Content-type: image/jpeg'); 

$text = $_SESSION['captcha']; 

$font_size = 30; 
$image_width = 160; 
$image_height = 50; 

$image = imagecreate($image_width, $image_height); 

imagecolorallocate($image, 200, 200, 200); 

$font_color = imagecolorallocate($image, 20 , 20 , 20); 

imagettftext($image, $font_size, 0, 15, 30, $font_color, 'BYekan.ttf', $text); 

imagejpeg($image); 
?> 

Скажите, пожалуйста, что я делаю неправильно?

P.S:

Я использую сервер лампы на Linux.

+0

Что происходит, когда вы просматриваете изображение? Кроме того, не используйте специальную капчу в производственном коде. Есть хороший шанс, что это будет тривиально сломаться. – Blender

+0

@Blender Изображение не отображается. Вы можете увидеть снимок [здесь] (http://up.vbiran.ir/uploads/137561490836539_gd1.png). –

+0

Как вы можете получить доступ к BYekan.ttf? Я имею в виду, где файл шрифта? –

ответ

1

Возможно, GD library не установлен.

Также зарегистрируйтесь в php.ini и убедитесь, что линия GD раскоментирована.

0

Я удаляю вызов функции header в вашем скрипте и нашел ошибку, которую вы не указали в переменной $image_height. В вашем сценарии вы дублируете назначение $image_width.

+0

Это была моя ошибка в редакторе SO. Я это исправить. Моя проблема все еще остается ... –

+0

Можете ли вы удалить функцию 'header' и сообщить мне, что появляется на экране, когда вы переходите к файлу' generator.inc.php' из браузера? –

0

Мое предложение было бы попробовать 2 вещи:

Я прочитал и видели раньше, что люди предлагают поместить тип header('Content-type: image/jpeg'); контента непосредственно перед imagejpeg($image);. Чтобы поддержать это, вот статья, посвященная этому: http://php.net/manual/en/function.imagejpeg.php

Мое другое предложение было бы для base64_encode файла. Если header('Content-type: image/jpeg'); выдает предложение об ошибке «header() необходимо вызывать перед отправкой любого фактического вывода», то base64_encode позволяет создать изображение с указанием типа содержимого. Удалите код заголовка, а затем добавьте следующий код, когда вызывается imagejpeg($image);.

ob_start(); 
imagejpeg($image); //your code 
$img = ob_get_contents(); 
ob_end_clean(); 
echo '<img src="data:image/jpeg;base64,'.base64_encode($img).'" />'; 
Смежные вопросы