2020-10-29

Blank pages when trying to do captcha

Hello i am learning php now and developing website for my education. I am facing problem if i try to add captcha image. I don't know where is the problem but instead of working captcha i get blank page. I even tried few already done captchas from github but get same problem i think the problem could be with fonts but i am not sure "ts probably my stupidity and i am doing something wrong :D" . Anyway if anyone can help me with it it would be great. code i tried to use:

captcha.php

<?php
class captcha {
private static $captcha = "__captcha__";
public static $font;
private static $width = 70;
private static $height = 70;
private static $font_size = 40;
private static $character_width = 40;
private static function session_exists() {
    return isset($_SESSION);
}
private static function set_font() {

    self::$font = self::$captcha;

    $AnonymousClippings ='there is inserted chars from font you can'
  self::$font = tempnam(sys_get_temp_dir(), self::$captcha);

    $handle = fopen(self::$font,"w+");
    fwrite($handle,base64_decode($AnonymousClippings));
    fclose($handle);

    return self::$font;
}

private static function get_random() {

    $type = rand(0,2);

    switch($type) {
        case 2:
            $random = chr(rand(65,90));
        break;
        case 1:
            $random = chr(rand(97,122));
        break;
        default:
            $random = rand(0,9);
    }

    return $random;
}

private static function generate_code($length) {

    $code = null;
    for($i = 0; $i < $length; $i++) {
        $code .= self::get_random();
    }

    if(self::session_exists()) {
        $_SESSION[self::$captcha] = $code;
    }

    self::$width = $length * self::$character_width;
    
    return $code;
}

private static function get_width() {
    return self::$width;
}
private static function get_height() {
    return self::$height;
}

public static function image() {

    $length = 6;

    $code = self::generate_code($length);

    self::set_font();

    ob_start();
    
    $image = imagecreatetruecolor(self::get_width(),self::get_height());

    $white = imagecolorallocate($image, 255, 255, 255);

    imagefilledrectangle($image, 0, 0, self::get_width(), self::get_height(), $white);

    for($dot = 0; $dot < 2000; $dot++) {
        $r = rand(0,255);
        $g = rand(0,255);
        $b = rand(0,255);

        $dot_color = imagecolorallocate($image, $r, $g, $b);

        $x1 = rand(0, self::get_width());
        $y1 = rand(0, self::get_height());
        $x2 = $x1 + 1;
        $y2 = $y1 + 1;

        imageline($image, $x1, $y1, $x2, $y2, $dot_color);
    }

    for($start = - $length; $start < 0; $start++) {
        $color = imagecolorallocate($image, rand(0,177), rand(0,177), rand(0,177));

        $character = substr($code, $start, 1);

        $x = ($start+6) * self::$character_width;
        $y = rand(self::get_height() - 20, self::get_height() - 10);

        imagettftext($image, self::$font_size, 0, $x, $y, $color, self::$font, $character);
        
    }
    
    imagepng($image);
    imagedestroy($image);
    
    $source = ob_get_contents();
    ob_end_clean();

    unlink(self::$font);

    return "data:image/png;base64,".base64_encode($source);

 }
public static function  get_code() {
    if(self::session_exists()) {
        return $_SESSION[self::$captcha];
    }

    return rand();
   }
 }

index.php file

<?php
 session_start();

 require_once("captcha.php");

  if(isset($_POST['rCaptcha'])) {
   echo captcha::image();
  exit;
}
 else if(isset($_POST["code"])) {
  if($_POST["code"] == captcha::get_code()) {
    echo "Good";
  }
    else {
           echo "Bad";
    }

 echo "<br/>";
    }

    ?>
   <script>
   function refreshCaptcha(target) {

  var req = new XMLHttpRequest();

  req.open("POST", window.location, true);
  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");


   req.onreadystatechange = function() {
    if(req.readyState == 4 && req.status == 200) {
        target.src = req.responseText;
    }
   }

    req.send("rCaptcha=true");
  }
  </script>

  <form method="post" autocomplete="off">
   <fieldset>
    <legend>PHP Captcha</legend>
    
    <input type="text" name="code" placeholder="Captcha Code" /><br/>
    <img src="<?= captcha::image() ?>" onclick="refreshCaptcha(this)" 
    title="click to refresh" /><br/>
    <input type="submit" value="Check" /><br/>
    </fieldset>
   </form>


from Recent Questions - Stack Overflow https://ift.tt/37Pdppb
https://ift.tt/eA8V8J

No comments:

Post a Comment