从HTML调用PHP函数来设置img src(同一文件)

时间:2018-04-11 17:35:17

标签: php html image

我正在使用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);}?>

1 个答案:

答案 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()?>">