Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema captcha

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    98

    Problema captcha

    Ciao a tutti,
    ho trovato questo codice per fare un captcha:
    Codice PHP:
    <?php
    header
    ("Content-type: image/png");
    /* Sfondo con righe spesse colorate
       0  non attivo.
       1  attivo.  
       */
    $LinearBackgroud 0;

    /* Disturbo granulare
       0  non attivo
       1  attivo 
       */
    $GranularNoise 0;


    /* Disturbo rigato
       0  non attivo
       1  attivo  
       */
    $LinearNoise 0;


    /* Disurbo quadrettato
       0  non attivo
       1  attivo 
       */
    $SquareNoise 1;

    /* Distorsione orizzontale dei caratteri
       0  non attiva
       1  attiva  
       */
    $distorsion_hor 1;


    /* Distorsione verticale dei caratteri
       0  non attiva.
       1  attiva.  
       */
    $distorsion_ver 1;


    /* Colore dei caratteri
       0  caratteri neri.
       1  colori casuali.  
       */
    $CharacterColorMode 1;

    /* sottoinsieme del codice di sicurezza 
       0  L'utente verrà richiesto di inserire l'intero codice.
       1  L'utente deve inserire solo una parte dei caratteri mostratigli: quelli colorati di rosso 
       
       NOTA - Questa opzione è ovviamente incompatibile con l'opzione precedente che genera caratteri di vario colore 
       */
    $subset 0;


    /* Caratteri sfalsati
       0  non attivo.
       1  attivo.  
       */
    $staggering 1;


    /* Dimensione dei caratteri. 
       0.5   dimensione casuale tra 50 e 100%.
       0.6   dimensione casuale tra 60 to 100%.
       etc
       1     Dimensione fissa. 
       */
    $CharacterSizeMode 1;



    /* Angolo di rotazione dei caratteri.
       0  nessuna rotazione
       10 rotation csuale tra -10° e +10°
       20 rotation csuale tra -20° e +20°
       etc
       */
    $CharacterRotationMode 10;

    /*  Default font.
        Il font di default può essere cambiato, ma deve
        trovarsi nella stessa directory dello script 
       */
    $font 'sans.ttf';


    /*  Scelta casuale del font. 
    Fonts must be in same directory of script 
       0 non attivo. Viene caricato sempre il font di default
       1 attivo
       */
    $randomfont 0;
    $fontlist = array ("sans.ttf","box.ttf","ball.ttf","shades.ttf","outlined.ttf","sp.ttf","dayplanner.ttf");


    /* numero e tipo di caratteri usati per generare il codice di sicurezza. 
       */
    $Codelength 6;
    $Characters "23456789abcdefghkmnpqrstuvwxyz";


    /* Altezza dell'immagine  (la larghezza viene determinata automaticamente) 
       */
    $height 60;


    /* Colore dello sfondo
        0 Bianco
        1 Grigio
        2 Sfumatura colorata casuale
       */
    $BackgroudColorMode 0;

    # Non cambiare nulla qui sotto se non sai quello che fai

    ############################################################




    // Genero il codice di sicurezza
      
    for ($i 0$i $Codelength$i++) {
        
    $SecurityCode[$i] = substr($Characters,mt_rand(0,strlen($Characters) - 1),1);
        
    $pass=$pass.$SecurityCode[$i];
        
    $rand mt_rand(0,1);
        if (
    $i == 1) {$rand 1;}
        if (
    $rand 0
        {
    $pass2=$pass2.$SecurityCode[$i]; 
         
    $select[$i] = $i;
         
         
        } 
        else
        { 
         
    $select[$i] = -1;
        }
        
        
        
        
        }
    if (
    $randomfont 0) {$font $fontlist[mt_rand(0,6)];}



    //  Determino la dimensione del carattere in base all'altezza dell'immagine
    $fontsize $height 0.6;    


    // Determino la larghezza dell'immagine e la creo
    $textbox2 imagettfbbox($fontsize0$font$pass) or die('Error in imagettfbbox function');
    $width = (abs($textbox2[4] - $textbox2[0]))*1.25;
    $im imagecreatetruecolor($width$height);


    // Creo alcuni colori
    $white imagecolorallocate($im255255255);
    $grey imagecolorallocate($im238238238);
    $black imagecolorallocate($im000);
    $red imagecolorallocate($im25500);

    // Inserisco il colore di sfondo

    ImageFill($im00$grey);

    if (
    $BackgroudColorMode 1) {ImageFill($im00$white);}

    if (
    $BackgroudColorMode 1) {

    // sfondo sfumato
    $red_start   mt_rand(0,255);
    $red_end     mt_rand($red_start,255);

    $green_start mt_rand(0,255);
    $green_end   mt_rand($green_start,255);

    $blue_start  mt_rand(0,255);
    $blue_end    mt_rand($blue_start,255);

    function 
    dif ($start,$end)
    {
        if (
    $start >= $end)
            
    $dif $start $end;
        else
            
    $dif $end $start;

        return 
    $dif;
    }


    function 
    draw($start,$end,$pos,$step_width)
    {
        if (
    $start $end)    
            
    $color $start $step_width $pos;
        else
            
    $color $start $step_width $pos;
            
        return 
    $color;
    }    

    $dif_red dif($red_start,$red_end);
    $dif_green dif($green_start,$green_end);
    $dif_blue dif($blue_start,$blue_end);

    $step_red $dif_red $width;
    $step_green $dif_green $width;
    $step_blue $dif_blue $width;

    $height $height-1;


    for (
    $pos=0$pos<=$width$pos++)
    {
        
    $color ImageColorAllocate($im,draw($red_start,$red_end,$pos,$step_red),
                                           
    draw($green_start,$green_end,$pos,$step_green),
                                           
    draw($blue_start,$blue_end,$pos,$step_blue));    
        
        
    imageline($im,$pos,"0",$pos,$height,$color);
        
    }


    $height $height+1;

    }


    /* genero lo sfondo a righe colorate spesse */

    if ($LinearBackgroud 0) {
             
    imagesetthickness($im$height/10);
            for( 
    $i=0$i<$width*$height/200$i++ ) {
            
    $Color imagecolorallocate($immt_rand(100,250), mt_rand(100,250), mt_rand(100,250));
       
                
    imageline($immt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $Color);
            }
    }


    // sfasatura cifre
    $x $width/18;
    for (
    $i 0$i $Codelength$i++) {
     
    $Color $black;
     if (
    $CharacterColorMode 0)  $Color imagecolorallocate($immt_rand(0,250), mt_rand(0,250), mt_rand(0,250));
     
     
    $textbox imagettfbbox($fontsize0$font$SecurityCode[$i]) or die('Error in imagettfbbox function');
     
    $y = ($height $textbox[5])/2;
     
    $w abs($textbox[4] - $textbox[0]);
     
     
    $Size mt_rand($fontsize*$CharacterSizeMode,$fontsize);
     
    $Angle mt_rand(-$CharacterRotationMode,$CharacterRotationMode);
     if (
    $staggering 0) { 
      
    $x $x rand($w-$w/18 $w+$w/18);
     
    $y rand($y-($height/6) ,$y+($height/6));  
     
     if (
    $subset 1) {ImageTtfText($im,$Size,$Angle,$x-$w,$y,$Color,$font,$SecurityCode[$i]); } 
     else {
     
     if (
    $select[$i] > -1) {ImageTtfText($im,$Size,$Angle,$x-$w,$y,$red,$font,$SecurityCode[$i]); }
                  else {
    ImageTtfText($im,$Size,$Angle,$x-$w,$y,$Color,$font,$SecurityCode[$i]);}
     
     }
     } 
     else {

     
    $y $height $height/4;
     
    $x $x $w*1.1;
      
     if (
    $subset 1) {ImageTtfText($im,$Size,$Angle,$x-$w,$y,$Color,$font,$SecurityCode[$i]); } 
     else {
     
     if (
    $select[$i] > -1) {ImageTtfText($im,$Size,$Angle,$x-$w,$y,$red,$font,$SecurityCode[$i]); }
                  else {
    ImageTtfText($im,$Size,$Angle,$x-$w,$y,$Color,$font,$SecurityCode[$i]);}
     
     }
     
     }
    }


    /* 
    Ampiezza e Frequenza della distorsione verticale, 
    Valori troppo elevati rendono i caratteri illeggibili
    */
    $ampl_y 5
    $freq_y 10;

    /* 
    Ampiezza e Frequenza della distorsione verticale, 
    Valori troppo elevati rendono i caratteri illeggibili
    */
    $ampl_x 5
    $freq_x 10


    if (
    $distorsion_ver 0) {
    //Apply vertical distorsion
    for ($i=0;$i<$width;$i+=2){
                
    imagecopy($im,$im,
                    
    $xx+$i-2,$yy+sin($i/$freq_y)*$ampl_y,     //dest
                    
    $xx+$i,$yy,             //src
                    
    2,$height);
            }
     }  
    if (
    $distorsion_hor 0) {      
    //Apply horizontal distorsion
    for ($i=0;$i<$height;$i+=1){
                
    imagecopy($im,$im,
                    
    $xx+sin($i/$freq_x)*$ampl_x,$yy+$i-1,     //dest
                    
    $xx,$yy+$i,             //src
                    
    $width,1);
            }
    }


    // disturbo quadrettato
    if ($SquareNoise 0) {
    imagesetthickness($im1);
    for(
    $i 0$i <= $width$i += $height/5) {
            @
    ImageLine($im$i0$i$height$black);
          }
          for(
    $i 0$i <= $height$i += $height/5) {
            @
    ImageLine($im0$i$width$i$black);
          }
    }



    /* disturbo rigato */
    if ($LinearNoise 0) {
    imagesetthickness($im1);
            for( 
    $i=0$i<$height$i++ ) {
                
    imageline($immt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $black);
            }
    }

    # disturbo granulare
    if ($GranularNoise 0) {
     for (
    $i=1;$i<($width*$width/10);$i++)
                {
                    
    $cor_x mt_rand(1,$width);
                    
    $cor_y mt_rand(1,$height);
                    
    imagesetpixel($im,$cor_x,$cor_y,$black);
                }
    }

    // genero l'immagine 

            
    imagepng($im);
            
    imagedestroy($im);
            
    if (
    $subset 0) {$pass $pass2;}

    // memorizzo il codice per la successiva verifica
    $ref mysql_query("UPDATE tb_captcha SET codice = '$pass';");
    ?>
    Nel form di registrazione lo richiamo con:
    <img src=captcha.php></img>

    Però ho notato che firefox e anche IE dopo la prima volta quando aggiorno l'immagine è sempre uguale e cambia solo quando elimino i file temporanei perchè se la memorizzano. Anche se l'immagine rimaneva uguale pensavo che il codice nel db sarebbe comunque cambiato, invece pure quello rimane sempre uguale fino a che non cancello i file temporanei O.O

    un grazie a chi saprà aiutarmi

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Metti un po' di header per disabilitare il cache.

    Ad esempio all'inizio del file, subito prima di
    Codice PHP:
    header("Content-type: image/png"); 
    aggiungi
    Codice PHP:
    header'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
    header'Last-Modified: ' gmdate'D, d M Y H:i:s' ) . ' GMT' );
    header'Cache-Control: no-store, no-cache, must-revalidate' );
    header'Cache-Control: post-check=0, pre-check=0'false );
    header'Pragma: no-cache' ); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    98
    grz per la risposta, IE adesso cambia correttamente l'immagine, ma purtroppo in firefox persiste sempre la stessa :S

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Ma hai cancellato i file temporanei di sempre (e non solo ad esempio dell'ultima ora) di firefox?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    98
    scusate se ritardo a rispondere, comunque ho risolto come dicevi tu bubi1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.