2012-12-07 5 views
1

Comment charger ceci? En ce moment, ça ne montre aucune image ... Je ne suis pas vraiment génial pour créer des captcha parce que je ne fais jamais ça.L'image Captcha ne se charge pas?

captcha.php:

<?php 
$string = ''; 
for ($i = 0; $i < 5; $i++) { 
    // this numbers refer to numbers of the ascii table (lower case) 
    $string .= chr(rand(97, 122)); 
} 
$image = imagecreatetruecolor(170, 60); 
$color = imagecolorallocate($image, 200, 100, 90); // red 
$white = imagecolorallocate($image, 255, 255, 255); 
imagefilledrectangle($image,0,0,399,99,$white); 
imagettftext ($image, 30, 0, 10, 40, $color, ASSETPATH."arial.ttf", $string); 
header("Content-type: image/png"); 
imagepng($image); 
?> 

register.php:

<?php echo '<img src="'.ASSETPATH.'img/captcha.php" />'; ?> 

Mon parcours d'actifs est correct parce que je l'utilise ailleurs et il charge parfaitement bien. Est-ce que le format MVC de ce projet le gâche d'une façon ou d'une autre?

+0

Si vous devez utiliser un CAPTCHA, profitez d'un service comme reCAPTCHA - les CAPTCHA générés par votre script personnalisé (texte brut sur fond blanc) seront triviaux à casser. – leepowers

Répondre

0

Comment utiliser l'un des services captcha comme recaptcha?

0

A en juger par votre utilisation de cette constante ASSETPATH à la fois pour vous URI image ainsi que le chemin fontfile dans imagettftext Je ne peux supposer que vous avez votre fontfile stocké dans le même chemin que celui de votre image?

Si ce n'est pas le cas, ou que le fichier n'a pas pu être ouvert, PHP affichera un avertissement de imagettftext(): Invalid font filename. Si display_errors est réglé sur Sur dans votre php.ini (vous pouvez vérifier phpinfo pour vérifier cela) cela signifie que le message d'erreur sera envoyé au flux de sortie avec vos données d'image (par exemple, corrompre les données d'image et provoquer votre navigateur pour afficher l'image). Cela empêcherait également les en-têtes d'être modifiés puisque l'erreur aurait eu lieu avant votre appel à l'en-tête.

Toutefois, si display_errors ne sont pas activés et PHP n'a pas pu trouver le fontfile ou que vous avez fourni, il ne pouvait pas être ouvert pour une raison quelconque (par exemple autorisations) le résultat sera une image PNG 170x60 blanc.

Si je teste votre code localement, il s'avère fonctionner comme prévu, tant que je fournis à PHP le chemin absolu correct vers mon fichier de police TrueType. Par exemple, j'ai quelques polices TrueType sur mon système stockées à /usr/share/fonts/truetype/, ce qui n'est certainement pas dans mon site web car je ne conserve pas mes fichiers de police normalement. Notez également que mon utilisateur PHP dispose de autorisations suffisantes pour lire à partir de ce chemin.

Maintenant, si je l'offre PHP avec le chemin absolu correct au fichier de police TrueType que je voudrais utiliser j'obtenir l'image en utilisant votre code ...

$string = ''; 
for ($i = 0; $i < 5; $i++) { 
    // this numbers refer to numbers of the ascii table (lower case) 
    $string .= chr(rand(97, 122)); 
} 
$image = imagecreatetruecolor(170, 60); 
$color = imagecolorallocate($image, 200, 100, 90); // red 
$white = imagecolorallocate($image, 255, 255, 255); 
imagefilledrectangle($image,0,0,399,99,$white); 
imagettftext ($image, 30, 0, 10, 40, $color, '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-ExtraLight.ttf', $string); 
header("Content-type: image/png"); 
imagepng($image); 

Image output from the above code

Qu'est-ce que vous devriez essayer de faire pour déboguer ceci est exécuté le script PHP qui génère l'image par lui-même, avec display_errors activé et error_reporting mis à -1 et si c'est effectivement le cas que votre fichier de police est le problème, vous verrez ce dans votre error_log ou dans la sortie d'erreur affichée pendant testin g ce script avec display_errors activé.