2012-11-06 5 views
0

J'ai créé une image Captcha à utiliser sur divers formulaires. Cela fonctionne très bien dans une création d'une rangée de lettres qui, une fois entré correctement, envoie l'information au bon courriel.Même code, résultat différent. Pourquoi?

Toutefois, lorsque je coupe et colle exactement le même code, l'image crée des nombres qui ne peuvent pas être lus et, par conséquent, le formulaire ne peut pas être envoyé. Je ne peux pas pour la vie de moi voir pourquoi ce serait?

Ou au moins d'empêcher la forme des nombres apparaissant?

Merci beaucoup d'avance pour toute aide

code ci-dessous:

<?php session_start(); 
    // Set some important CAPTCHA constants 

define('CAPTCHA_NUMCHARS', 6); 
define('CAPTCHA_WIDTH', 100);  
define('CAPTCHA_HEIGHT', 25); 

// Generate the random pass-phrase 
$pass_phrase = ""; 
for ($i = 0; $i < CAPTCHA_NUMCHARS; $i++) { 
$pass_phrase .= chr(rand(97, 122)); 
    } 

// Store the encrypted pass-phrase in a session variable 
$_SESSION['pass_phrase'] = SHA1($pass_phrase); 

// Create the image 
$img = imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT); 
// Set a white background with black text and gray graphics 

$bg_color = imagecolorallocate($img, 255, 255, 255);  // white 
$text_color = imagecolorallocate($img, 0, 0, 0);   // black 
$graphic_color = imagecolorallocate($img, 64, 64, 64); // dark gray 

// Fill the background 
    imagefilledrectangle($img, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, $bg_color); 
// Draw some random lines 

for ($i = 0; $i < 5; $i++) { 
    imageline($img, 0, rand() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic_color); 
    } 
// Sprinkle in some random dots 

for ($i = 0; $i < 50; $i++) { 
    imagesetpixel($img, rand() % CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic_color); 
    } 
// Draw the pass-phrase string 

    imagettftext($img, 18, 0, 5, CAPTCHA_HEIGHT - 5, $text_color, 'Courier New Bold.ttf', $pass_phrase); 
// Output the image as a PNG using a header 

header("Content-type: image/png"); 
    imagepng($img); 


    // Clean up 

imagedestroy($img); 

?> 
+1

Expliquez à nouveau la partie problème, faites un exemple; étant donné que vous avez des images, montrez-les. Aussi, est-ce lié à votre fichier de police peut-être? – mario

+1

SHA-1 n'est pas une routine de cryptage, ne l'appelez pas comme ça. – NullUserException

+3

Peu importe, il est stocké dans la session afin que l'utilisateur ne le voit jamais. Aussi bien renoncer au hash et stocker la réponse directement. Les sessions sont stockées côté serveur. – Halcyon

Répondre

0

tout d'abord, essayez de vous hardcoding directement dans la fonction phrase de passe imagettftext(). Cela vous permettra de déterminer si le problème réside dans l'algorithme de génération de phrase secrète ou dans la génération png ...

Questions connexes