|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
ANTI FLOOD SANS LA LIBRAIRIE GD
Information sur la source
Description
Une petite class pour remplacer la librairie GD pour ce qui est de l'anti-flood. Lorsque cette librairie est désactivée (souvent chez les hébergeurs gratuits), on ne peut pas créer des images aléatoires. Cette class le fait et y a avec une autre pour vérifier ce qui est saisi. L'idée c'est de générer un code (qu'il faut saisir) dont chaque caractère est représenté par une image contenant le même caractère (dans mon exemple c'est des chiffres) mais avec un nom ("xxxxx.jpg") différent à chaque fois, par exemple l'image qui contient le chiffre "6" peut avoir comme nom "xgrt.jpg" ou bien "jhfg.jpg"... Le nombre de carctères pour ça est contrôlable aussi. A vous de tester et dites ce que vous en pensez ou comment l'améliorer.
Source
- <?php
- ////////////////////////////////////////////////////////////////////////////////\
- // //
- // Nom du code : Anti_Flood_Sans_GD (Class php) //
- // Version : 1.0 //
- // Date de création: 17 / 08 / 2005 //
- // Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
- // E-mail : FBNKCMaster@hotmail.com //
- // //
- // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // Remerciements à : //
- // -> GRenard pour ses remarques, ses règles //
- // de la bonnes programmation //
- // -> Arnotic pour l'idée de son code de génération //
- // de mots de passe sur cette adresse: //
- // (http://www.phpcs.com/code.aspx?ID=12787) //
- // -> Tous ceux qui peuvent apporter des critiques //
- // constructives à cette source //
- // //
- // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // Remarque : //
- // Merci de ne pas supprimer cette partie //
- // //
- // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // ENJOY IT!!! //
- // //
- /////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ## Class anti-flood "anti_flood" ##
- ## fichier anti_flood.class.php ##
-
- class anti_flood
- {
- var $equiv = array(); //tableau qui contient
- var $decryptage = array(); //tableau qui contient
- var $nv_noms = array(); // tableau des nouveaux noms
- var $dos_img = 'img_flood'; // dossier qui contient les images
- var $dos_sess = 'sess_flood'; // dossier où sera créé un dossier pour chaque session
- var $nbr_carac_code; //Nombre de carctères du code à saisir
- var $nbr_crypt_code; // Nombre de caractères pour crypter les noms originels des images
- var $sess; // la variable de la session
-
- function anti_flood($nbr_car, $nbr_cryp) //le constructeur
- {
- $this->nbr_carac_code = $nbr_car;
- $this->nbr_crypt_code = $nbr_cryp;
-
- $this->sess = session_id(); // On génère un id pour la session
- $this->suppr_dos(); //On vide le dossier des sessions "sess_flood" au cas où la vérification n'est pas faite
-
- $code = $this->gen($this->nbr_carac_code,'num');
- for($i = 0; $i < $this->nbr_carac_code; $i++) // On fait correspondre chaque caractère à une image à qui on génère un nouveau nom aléatoire à l'aide de la méthode $this->gen()
- {
- $this->attribuer($code{$i}, $this->gen($this->nbr_crypt_code, 'alpha'));
- }
- $this->sess(); // On enregistre toutes les variables (tableaux) pour les traiter lors de la vérification
- }
-
-
- function suppr_dos() // La méthode pour supprimer les dossiers des sessions créés et leurs fichiers
- {
- $dos = opendir($this->dos_sess);
- while ($fichier = readdir($dos))
- {
- $l = array('.', '..');
- if (!in_array( $fichier, $l))
- {
- if (is_dir($this->dos_sess.'/'.$fichier))
- {
- $s_dos =opendir($this->dos_sess.'/'.$fichier);
- WHILE($f = readdir($s_dos))
- {
- @unlink($this->dos_sess.'/'.$fichier.'/'.$f);
- }
- @closedir($s_dos);
- @rmdir($this->dos_sess.'/'.$fichier);
- }else
- {
- unlink($this->dos_sess.'/'.$fichier);
- }
- }
- }
- @closedir($doss);
- }
-
- function gen($nbrcar, $car) // La méthode qui génère les codes
- {
- @mkdir($this->dos_sess.'/'.$this->sess, 0777);
- $caracteres = array('num' => '0123456789', 'alpha' => 'abcdefghijklmnopqrstuvwxyz');
- $nbr_caracteres = strlen($caracteres[$car]);
- $code = '';
- for($i = 0; $i < $nbrcar; $i++)
- {
- $code .= $caracteres[$car]{mt_rand()%$nbr_caracteres};
- }
- return $code;
- }
-
- function attribuer($nom_orig, $crypt) // La méthode qui attribue chaque code généré à chaque image qui sera affichée (la méthode qui crypte les noms originels des images affichés)
- {
- if(array_key_exists($nom_orig, $this->equiv)) // Si la clef (qui correspond au nom original de l'image) existe déjà dans notre tableau "$this->equiv"
- {
- // $nom_orig existe déjà, on ajoute "l'ancien" nouveau nom au tableau "$this->nv_noms"
- $this->nv_noms[] = $this->equiv[$nom_orig];
- }else
- {
- // $nom_orig n'existe pas => donc on ajoute au tableau le code généré à cette clef qui sera son index
- $this->copier_img($nom_orig, $crypt); // On copie l'image avec son nouveau nom crypté
- $this->equiv[$nom_orig] = $crypt;
- }
- $this->decryptage[] = $this->equiv[$nom_orig]; // Un autre tableau "indispensable!" qui contient les codes de toutes les cles (noms des images) à affiché
- }
-
- function copier_img($nom_orig, $nv_nom) // La méthode qui copie l'image à afficher avec le nouveau nom crypté vers le dossier de la session
- {
- if(copy($this->dos_img.'/'.$nom_orig.'.jpg', $this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg'))
- {
- // L'image est copiée avec succès donc on ajoute son nouveau nom au tableau "$this->nv_noms"
- $this->nv_noms[] = $nv_nom;
- }else
- {
- // Sinon on affiche une image nom trouvée
- echo '<img src="x.jpg" alt="" />';
- }
- }
-
- function afficher() // La méthode qui affiche les images avec leurs nouveaux noms et emplacement
- {
- foreach($this->nv_noms as $nv_nom)
- {
- echo '<img src="'.$this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg" alt="" />';
- }
- }
-
- function sess() // La méthode qui enregistre le nom de la session et les tableaux qu'on va traiter dans la class verif_flood.class.php et on les passe par une variable session
- {
- $tableau[] = $this->equiv;
- $tableau[] = $this->decryptage;
- $_SESSION[$this->sess] = $tableau;
- }
- }
- ?>
-
- ###################################################
-
-
-
-
- <?php
- ////////////////////////////////////////////////////////////////////////////////\
- // //
- // Nom du code : Anti_Flood_Sans_GD (Class php) //
- // Version : 1.0 //
- // Date de création: 17 / 08 / 2005 //
- // Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
- // E-mail : FBNKCMaster@hotmail.com //
- // //
- // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // Remerciements à : //
- // -> GRenard pour ses remarques, ses règles //
- // de la bonnes programmation //
- // -> Arnotic pour l'idée de son code de génération //
- // de mots de passe sur cette adresse: //
- // (http://www.phpcs.com/code.aspx?ID=12787) //
- // -> Tous ceux qui peuvent apporter des critiques //
- // constructives à cette source //
- // //
- // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // Remarque : //
- // Merci de ne pas supprimer cette partie //
- // //
- // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
- // //
- // ENJOY IT!!! //
- // //
- /////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ## Class de verification "verif_flood" ##
- ## fichier verif_flood.class.php ##
-
- require_once('anti_flood.class.php');
- class verif_flood extends anti_flood // On herite de la class mère "anti_flood"
- {
- var $code_saisi;
-
- function verif_flood($code) // Le constructeur8
- {
- $this->code_saisi = $code;
- $this->sess = session_id(); // On cherche l'id de la session
- $tableaux = $_SESSION[$this->sess]; // On extrait les tableaux => un tableau multi-dimensionnel
- foreach($tableaux as $v) // On reconstruit les sous-tableaux
- {
- $st[] = $v; // "st" = sous-tableau
- }
- $this->equiv = $st[0]; // Là juste pour attribuer le nom à chaque sous tableau pour pas se perdre après...
- $this->decryptage = $st[1];
-
- $this->suppr_dos(); // On vide le dossier des sessions "sess_flood"
- //return $this->verifier(); // On vérifie
- }
-
- function verifier() // La méthode qui decrypte et verifie le code entré
- {
- $nbr_carac_code = strlen($this->code_saisi);
- //Et là on crypte le code entré: chaque caractère entré correspond à un code qu'on va récupérer dans le tableau d'equivalence "$this->equiv" ayant comme clefs les noms originaux des images
- $crypt = '';
- for($i = 0; $i < $nbr_carac_code; $i++)
- {
- if(isset($this->equiv[$this->code_saisi{$i}]))
- $crypt .= $this->equiv[$this->code_saisi{$i}];
- }
- // On obtient le code crypté qu'on va comparer avec la suite des codes générés pour chaque images... C'est un peu difficil à comprendre du premier coup mais il faut juste méditer c'est simple l'idée!
-
- //Ici on decrypte..non on fait juste sortir et coller les codes générés, de chaque image, du tableau dont j'ai dit "indispensable!"... maintenant je crois que vous compreniez pourquoi ;)
- $decrypt = '';
- foreach($this->decryptage as $v)
- {
- $decrypt .= $v;
- }
- // On obtient la suite des codes les uns après les autres générés
-
- // On compare les deux codes obtenus
- if($crypt === $decrypt)
- {
- // C'est le bon code
- return true;
- }else
- {
- // C'est pas le bon code
- return false;
- }
- }
- }
- ?>
<?php
////////////////////////////////////////////////////////////////////////////////\
// //
// Nom du code : Anti_Flood_Sans_GD (Class php) //
// Version : 1.0 //
// Date de création: 17 / 08 / 2005 //
// Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
// E-mail : FBNKCMaster@hotmail.com //
// //
// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// Remerciements à : //
// -> GRenard pour ses remarques, ses règles //
// de la bonnes programmation //
// -> Arnotic pour l'idée de son code de génération //
// de mots de passe sur cette adresse: //
// (http://www.phpcs.com/code.aspx?ID=12787) //
// -> Tous ceux qui peuvent apporter des critiques //
// constructives à cette source //
// //
// |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// Remarque : //
// Merci de ne pas supprimer cette partie //
// //
// |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// ENJOY IT!!! //
// //
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
## Class anti-flood "anti_flood" ##
## fichier anti_flood.class.php ##
class anti_flood
{
var $equiv = array(); //tableau qui contient
var $decryptage = array(); //tableau qui contient
var $nv_noms = array(); // tableau des nouveaux noms
var $dos_img = 'img_flood'; // dossier qui contient les images
var $dos_sess = 'sess_flood'; // dossier où sera créé un dossier pour chaque session
var $nbr_carac_code; //Nombre de carctères du code à saisir
var $nbr_crypt_code; // Nombre de caractères pour crypter les noms originels des images
var $sess; // la variable de la session
function anti_flood($nbr_car, $nbr_cryp) //le constructeur
{
$this->nbr_carac_code = $nbr_car;
$this->nbr_crypt_code = $nbr_cryp;
$this->sess = session_id(); // On génère un id pour la session
$this->suppr_dos(); //On vide le dossier des sessions "sess_flood" au cas où la vérification n'est pas faite
$code = $this->gen($this->nbr_carac_code,'num');
for($i = 0; $i < $this->nbr_carac_code; $i++) // On fait correspondre chaque caractère à une image à qui on génère un nouveau nom aléatoire à l'aide de la méthode $this->gen()
{
$this->attribuer($code{$i}, $this->gen($this->nbr_crypt_code, 'alpha'));
}
$this->sess(); // On enregistre toutes les variables (tableaux) pour les traiter lors de la vérification
}
function suppr_dos() // La méthode pour supprimer les dossiers des sessions créés et leurs fichiers
{
$dos = opendir($this->dos_sess);
while ($fichier = readdir($dos))
{
$l = array('.', '..');
if (!in_array( $fichier, $l))
{
if (is_dir($this->dos_sess.'/'.$fichier))
{
$s_dos =opendir($this->dos_sess.'/'.$fichier);
WHILE($f = readdir($s_dos))
{
@unlink($this->dos_sess.'/'.$fichier.'/'.$f);
}
@closedir($s_dos);
@rmdir($this->dos_sess.'/'.$fichier);
}else
{
unlink($this->dos_sess.'/'.$fichier);
}
}
}
@closedir($doss);
}
function gen($nbrcar, $car) // La méthode qui génère les codes
{
@mkdir($this->dos_sess.'/'.$this->sess, 0777);
$caracteres = array('num' => '0123456789', 'alpha' => 'abcdefghijklmnopqrstuvwxyz');
$nbr_caracteres = strlen($caracteres[$car]);
$code = '';
for($i = 0; $i < $nbrcar; $i++)
{
$code .= $caracteres[$car]{mt_rand()%$nbr_caracteres};
}
return $code;
}
function attribuer($nom_orig, $crypt) // La méthode qui attribue chaque code généré à chaque image qui sera affichée (la méthode qui crypte les noms originels des images affichés)
{
if(array_key_exists($nom_orig, $this->equiv)) // Si la clef (qui correspond au nom original de l'image) existe déjà dans notre tableau "$this->equiv"
{
// $nom_orig existe déjà, on ajoute "l'ancien" nouveau nom au tableau "$this->nv_noms"
$this->nv_noms[] = $this->equiv[$nom_orig];
}else
{
// $nom_orig n'existe pas => donc on ajoute au tableau le code généré à cette clef qui sera son index
$this->copier_img($nom_orig, $crypt); // On copie l'image avec son nouveau nom crypté
$this->equiv[$nom_orig] = $crypt;
}
$this->decryptage[] = $this->equiv[$nom_orig]; // Un autre tableau "indispensable!" qui contient les codes de toutes les cles (noms des images) à affiché
}
function copier_img($nom_orig, $nv_nom) // La méthode qui copie l'image à afficher avec le nouveau nom crypté vers le dossier de la session
{
if(copy($this->dos_img.'/'.$nom_orig.'.jpg', $this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg'))
{
// L'image est copiée avec succès donc on ajoute son nouveau nom au tableau "$this->nv_noms"
$this->nv_noms[] = $nv_nom;
}else
{
// Sinon on affiche une image nom trouvée
echo '<img src="x.jpg" alt="" />';
}
}
function afficher() // La méthode qui affiche les images avec leurs nouveaux noms et emplacement
{
foreach($this->nv_noms as $nv_nom)
{
echo '<img src="'.$this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg" alt="" />';
}
}
function sess() // La méthode qui enregistre le nom de la session et les tableaux qu'on va traiter dans la class verif_flood.class.php et on les passe par une variable session
{
$tableau[] = $this->equiv;
$tableau[] = $this->decryptage;
$_SESSION[$this->sess] = $tableau;
}
}
?>
###################################################
<?php
////////////////////////////////////////////////////////////////////////////////\
// //
// Nom du code : Anti_Flood_Sans_GD (Class php) //
// Version : 1.0 //
// Date de création: 17 / 08 / 2005 //
// Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
// E-mail : FBNKCMaster@hotmail.com //
// //
// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// Remerciements à : //
// -> GRenard pour ses remarques, ses règles //
// de la bonnes programmation //
// -> Arnotic pour l'idée de son code de génération //
// de mots de passe sur cette adresse: //
// (http://www.phpcs.com/code.aspx?ID=12787) //
// -> Tous ceux qui peuvent apporter des critiques //
// constructives à cette source //
// //
// |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// Remarque : //
// Merci de ne pas supprimer cette partie //
// //
// |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
// //
// ENJOY IT!!! //
// //
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
## Class de verification "verif_flood" ##
## fichier verif_flood.class.php ##
require_once('anti_flood.class.php');
class verif_flood extends anti_flood // On herite de la class mère "anti_flood"
{
var $code_saisi;
function verif_flood($code) // Le constructeur8
{
$this->code_saisi = $code;
$this->sess = session_id(); // On cherche l'id de la session
$tableaux = $_SESSION[$this->sess]; // On extrait les tableaux => un tableau multi-dimensionnel
foreach($tableaux as $v) // On reconstruit les sous-tableaux
{
$st[] = $v; // "st" = sous-tableau
}
$this->equiv = $st[0]; // Là juste pour attribuer le nom à chaque sous tableau pour pas se perdre après...
$this->decryptage = $st[1];
$this->suppr_dos(); // On vide le dossier des sessions "sess_flood"
//return $this->verifier(); // On vérifie
}
function verifier() // La méthode qui decrypte et verifie le code entré
{
$nbr_carac_code = strlen($this->code_saisi);
//Et là on crypte le code entré: chaque caractère entré correspond à un code qu'on va récupérer dans le tableau d'equivalence "$this->equiv" ayant comme clefs les noms originaux des images
$crypt = '';
for($i = 0; $i < $nbr_carac_code; $i++)
{
if(isset($this->equiv[$this->code_saisi{$i}]))
$crypt .= $this->equiv[$this->code_saisi{$i}];
}
// On obtient le code crypté qu'on va comparer avec la suite des codes générés pour chaque images... C'est un peu difficil à comprendre du premier coup mais il faut juste méditer c'est simple l'idée!
//Ici on decrypte..non on fait juste sortir et coller les codes générés, de chaque image, du tableau dont j'ai dit "indispensable!"... maintenant je crois que vous compreniez pourquoi ;)
$decrypt = '';
foreach($this->decryptage as $v)
{
$decrypt .= $v;
}
// On obtient la suite des codes les uns après les autres générés
// On compare les deux codes obtenus
if($crypt === $decrypt)
{
// C'est le bon code
return true;
}else
{
// C'est pas le bon code
return false;
}
}
}
?>
Conclusion
################### Exemple d'utilisation ###################### ################################################################ ## la page où s'affichera le code à saisir (par ex: index.php)## <?php session_start(); echo '<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ANTI-FLOOD SANS GD</title> </head> <body> <div align="center"> '; require_once('anti_flood.class.php'); $anti_flood = new anti_flood(6, 4); // On ainstancie la class avec les deux parmèttres: "6"-> nombre de caractères à saisir "4"-> nombre de caractères pour crypter les noms originels des images $anti_flood->afficher(); // On affiche les caractères (les images) echo ' <br /> <form method="post" action="verif_flood.php"> <input type="text" name="flood" /><br /> <input type="submit" value="Valider" /> </form> </div> </body> </html> '; ?> ################################################# ## fichier de verification (verif_flood.php) ## <?php session_start(); echo '<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ANTI-FLOOD SANS GD</title> </head> <body> <div align="center"> '; if(isset($_POST['flood'])) { $code = $_POST['flood']; // On récupère le code saisi require_once('verif_flood.class.php'); $verif = new verif_flood($code); // On instancie la class de verification aveccomme paramèttre le code saisi if($verif->verifier() === true) { echo 'C\'est le bon code!!'; }else { echo 'Code invalide!!!'; } } echo ' </div> </body> </html> '; ?>
Historique
- 19 août 2005 18:47:29 :
- Voir la discussion en bas.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Comment tester les fichiers PHP [ par Clem ]
Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp
Tri de fichiers par date [ par Clem ]
Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :<?$rep=opendir('.');while ($file = r
Fichiers dans une base de donnée [ par Clem ]
Comment uploader un fichier dans une base de données, et le downloader ?
réaliser et envoyer des fichiers zip [ par pupuce ]
J'ai vu qu'il est possible de créer des fichiers zip, jusque là je vois bien comment faire mais :Je veut pouvoir envoyer le zip au client, sans qu'il
Compter des fichiers.... [ par FleX ]
Alors voila. je voudrais me faire un script php3 qui compte le nombre de fichiers dans un dossier et que le resultat soit mis dans une variable, que j
créer un fichier ???? petit PB [ par MangaII ]
Hello les gars !Voilà, j'ai un petit soucis, j'ai besoin de créer des fichiers (TXT) sur mon site, depuis ma page en PHP ! le PB, c que je pe pas ! Je
Encore les fichiers [ par koko ]
bon c'est encore moi avec mes fichiers.txt... cette fois-ci, je voudrais que lorque j'ouvre le fichier, il mets les variables qui sont à l'intérieur d
fichiers batch et username [ par booth ]
bonjour, je cherche le moyen soit de lancer un batch sur la machine client, soit de récupérer directement son username (log windows ou netware)si kelk
zipper plusieurs fichiers [ par eax ]
help! je cherche à apprendre comment faire pour zipper plusieurs fichiers (des images par exemple). si qqun connait un bon tutorial ou un code source
connection FTP par PHP [ par JulienC ]
Bonjour à toutes et à tous,Mon but est de pouvoir uploader sur mon site des fichiers ayant une extension particulière (on les nommera .ext). Ces fichi
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|