2013-08-04 57 views
0

我創建了一個簡單的驗證碼生成器,但不會顯示驗證碼圖像:PHP:創建一個簡單的驗證碼

的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服務。

+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

當您從瀏覽器導航到'generator.inc.php'文件時,您可以刪除'header'函數並讓我知道屏幕上顯示的內容嗎? –

0

我的建議是嘗試兩件事情:

我已閱讀並見過那人建議只是imagejpeg($image);之前放置的內容類型header('Content-type: image/jpeg');。爲了支持這裏是一篇文章:http://php.net/manual/en/function.imagejpeg.php

我的其他建議是base64_encode該文件。如果header('Content-type: image/jpeg');產生錯誤建議「必須在發送任何實際輸出之前調用標頭()」,那麼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).'" />';