PHP:创建一个简单的Captcha

时间:2013-08-04 11:07:02

标签: php gd

我创建了一个简单的验证码生成器,但不会显示验证码:

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上使用Lamp服务器。

3 个答案:

答案 0 :(得分:1)

可能未安装GD library

同时检查php.ini并确保取消注释GD行。

答案 1 :(得分:0)

我删除了脚本中的header函数调用,发现了一个未定义$image_height变量的错误。在您的脚本中,您复制$image_width作业。

答案 2 :(得分:0)

我的建议是尝试两件事:

我之前已阅读并看过人们建议将内容类型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).'" />';