Optimisation code php

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour, j'aimerais savoir si il existe un moyen d'optimisé ce code :
<?php
$timestamp_debut = microtime(true);
 
require 'groups/functions.php';
$bdd = connexion_bdd();
$text = 'exemple@email.com'; 

$reqmail = $bdd->query('SELECT mail FROM espace_membre_membres');
$i = 0;
while($mail = $reqmail->fetch()){
	if($text == decrypter($mail['mail'])){
		$i++;
	}
}

echo $i.'<br />';
 
$timestamp_fin = microtime(true);
$difference_ms = $timestamp_fin - $timestamp_debut;
echo 'Exécution du script : ' . $difference_ms . ' secondes.';
?>

Merci d'avance
Nils0

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Tout dépend ce que contient ta fonction decrypter

    0
    1. Utilisateur anonyme
       
      Merci de ta réponse, voici les fonctions :
      function crypter($chaine){
          if($chaine != null){
              $key = 'lacle';
              $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
              $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
              $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
              $chaine, MCRYPT_MODE_CBC, $iv);
              $ciphertext = $iv . $ciphertext;
              $ciphertext_base64 = base64_encode($ciphertext);
              return $ciphertext_base64; 
          }
      }
      
      function decrypter($chaine_crypter){
          if($chaine_crypter != null){
              $key = 'lacle';
              $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
              $ciphertext_dec = base64_decode($chaine_crypter);
              $iv_dec = substr($ciphertext_dec, 0, $iv_size);
              $ciphertext_dec = substr($ciphertext_dec, $iv_size);
              $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
              $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
              return trim($plaintext_dec);
          }
      }
      
      0
  2. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Tu peux probablement l'optimiser en cryptant le mail $text, et le mettant dans la clause WHERE du SQL, avec un COUNT(1) :
    <?php
    $timestamp_debut = microtime(true);
     
    require 'groups/functions.php';
    $bdd = connexion_bdd();
    $text = crypter('exemple@email.com'); 
    
    $reqmail = $bdd->query("SELECT COUNT(1) as nb FROM espace_membre_membres WHERE mail='$text'");
    
    $res = $reqmail->fetch();
    echo $res['nb'] . '<br />';
     
    $timestamp_fin = microtime(true);
    $difference_ms = $timestamp_fin - $timestamp_debut;
    echo 'Exécution du script : ' . $difference_ms . ' secondes.';
    ?>
    

    Pourquoi ça optimise ? Tu ne fais qu'une seule opération cryptographique au lieu de N.
    Pourquoi j'ai dit « probablement » ? Parce que je ne sais pas combien coûte la fonction crypter par rapport à la fonction decrypter. Si la première coûte 10 fois la seconde, et que tu n'as que 5 lignes en base, alors mon code n'optimise rien.
    Par contre, pour un grand nombre de lignes en base, c'est clairement plus efficace.

    Xavier
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      (Juste au passage, si $text vient en réalité d'une donnée saisie par un utilisateur, utilise une requête préparée pour éviter les injections SQL)
      0
    2. Utilisateur anonyme > Reivax962 Messages postés 3742 Statut Membre
       
      oui t'inquiète pas je sais ;)
      0
    3. Utilisateur anonyme
       
      par contre ça ne marche pas car le systeme de cryptage retourne une chaine aléatoire...
      0
    4. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Si tu chiffres deux fois la même chaîne tu n'as pas deux fois le même résultat ?
      Mais tu peux les déchiffrer quand même ? C'est louche ton truc ^^'
      0