我正在使用PHP生成验证码图像
我正在调用“captcha.php”来设置img src=""
,如下所示:
<img src="captcha.php">
然后我合并了文件并在函数中插入了所有PHP代码,当我尝试在img src中调用这样的函数时:
<img src="<?php echo generateCaptcha();?>>
它给了我一个黑页。
PHP相关代码:
header("Content-type: image/png");
imagepng($Immagine);
imagedestroy($Immagine);`
HTML电话:
<img src="<?php echo generateCaptcha();?>" id="CaptchaImg" name="CaptchaImg"/>
我是否遇到函数返回值的问题?
HTML是否在图片扩展方面苦苦挣扎?
出了什么问题,我该如何解决?
功能代码:
<?php function generateCaptcha(){
session_start();
$stringa = '';
for($i=0; $i<5; $i++)
switch(rand (0, 2)){
case 0:
$stringa .= chr(rand(97, 122));
break;
case 1:
$stringa .= chr(rand(65, 90));
break;
case 2:
$stringa .= chr(rand(48, 57)); }
#print "$stringa";
$_SESSION["Codice_Captcha"] = $stringa;
$Immagine = imagecreatetruecolor(160, 60);
$r=rand(0,75);
$g=rand(0,75);
$b=rand(0,75);
$coloreSfondo = imagecolorallocate($Immagine, $r, $g, $b);
$coloreScritta = imagecolorallocate($Immagine, 255-$r, 255-$g, 255-$b);
imagefilledrectangle($Immagine,0,0,230,130,$coloreSfondo);
$fontType="fonts/".rand(0,49).".ttf";
switch(rand(0,2)){#permutations of the image}
imagettftext($Immagine, 30, rand(-5, 5), 10, 45, $coloreScritta, $fontType, $_SESSION["Codice_Captcha"]);
imagesetthickness($Immagine, 2);
switch(rand(0,8)){#permutations of the image }
header("Content-type: image/png");
imagepng($Immagine);
imagedestroy($Immagine);}?>
答案 0 :(得分:0)
我建议您检查服务器日志中的错误。
您必须在任何其他输出之前致电header()
。但是,在您的代码中,页面在调用执行<img>
的函数之前输出header()
标记的第一部分。这可能会引发错误。此外,我认为下面的行会抛出错误,因为#
注释了结束括号:
switch(rand(0,2)){#permutations of the image}
我建议更改功能以输出base64编码的图像数据
然后,您可以将函数的返回值回显到<img>
。
这样的事情:
<?php
function generateCaptcha(){
$Immagine = imagecreatetruecolor(160, 60);
$r=rand(0,75);
$g=rand(0,75);
$b=rand(0,75);
$coloreSfondo = imagecolorallocate($Immagine, $r, $g, $b);
$coloreScritta = imagecolorallocate($Immagine, 255-$r, 255-$g, 255-$b);
imagefilledrectangle($Immagine,0,0,230,130,$coloreSfondo);
ob_start();
imagepng($Immagine);
$image_data = ob_get_contents();
ob_end_clean();
imagedestroy($mmagine);
return 'data:image/png;base64,'.base64_encode($image_data);
}
?><img src="<?=generateCaptcha()?>">