IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] file_exist ou requete sql ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 19
    Points
    19
    Par défaut [Système] file_exist ou requete sql ?
    Bonjour,

    Je suis en train de coder un système de cache pour chacune de mes pages et je me demandais s'il était plus coûteux en ressource d'utiliser la fonction file_exist() dans une condition ou bien de faire un SELECT via mysql et d'y vérifier le résultat dans une condition ?

    exemples:

    au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = mysql_query("SELECT `id` FROM `table` WHERE `data1`='".$user['id']."';");
    $sql = mysql_fetch_array($sql);
    if($sql['id']){traitement;}
    je souhaiterais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(file_exist("fichier-".$user['id'].".htm")) {traitement;}
    pour moi en regardant les lignes, file_exist() me semble + rapide d'exécution.
    mais est-ce vrai ? (je fait ce système car le site deviendra assez gros dans quelques semaines/mois .. et je suis donc penché sur son optimisation)

    je vous remercie d'avance pour vos réponses en espérant pouvoir avancer convenablement grâce à votre aide ^^

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Donc si il y a un user, il doit avoir un fichier le concernant.

    Par souci d'éviter les erreurs , je ferais les deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $sql = mysql_query("SELECT `id` FROM `table` WHERE `data1`='".$user['id']."';");
    $row = mysql_num_rows($result);
     
    if($row > 1 && file_exist("fichier-".$user['id'].".htm") ) {
     
    //traitement
    }else{
       if($row > 1){
          //j'ai un user mais de fichier
    }
       if(file_exist("fichier-".$user['id'].".htm") ) {
     
           //j'ai un fichier mais pas de user
    }
    } ;
    Mais bon, j'imagine que tu fais cette vérification au moment de la création de ton user!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    oui en fait les fichiers cache sont créés lors de l'enregistrement de l'user , puis modifié à chaque fois qu'il va re-modifier des informations sur son profil par exemple.

    c'est pour ça que je voulais savoir si file_exists() dans une condition était plus rapide d'exécution et moins gourmand qu'une requête sql stockée dans une variable qui ensuite arrive dans la condition ^^

    ce qui me permettra ensuite d'inclure le fichier cache demandé ou d'envoyé sur une page d'erreure si l'user n'a pas d'id pour la colonne data1, qui elle représente donc un morceau du nom du fichier cache.

    exemples de forme que j'utilise donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(file_exists("profil-".$user['id'].".htm"))
        include("profil-".$user['id'].".htm");
    else
        die("attemp hacking");
    m'enfin normalement le else ne se déclenche que si un hacker réussi à modifier l'id qui ce trouve dans le cookie tout en passant au travers du système de vérification du cookie sans effacer celui-ci. (donc les chances sont presque nulles en fait..)

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    J'aurais tendance à dire file_exist, puisqu'au final c'est ce qui t'intéresse.

  5. #5
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    salut,

    Pour savoir quelle est la solution la plus rapide, tu peux simplement calculer le temps que chaque solution te prend.
    (tu fais une grande boucle pour que le resultat soit plus flagrant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $debut=time();
    for($i=1;$i<100;$i++)
    {//100,1000,10 000 a toi de voire
     //ta requete sql et ton test if($sql['id']){traitement;}
    }
    echo time()-$debut;
    ?>
    tu fais la meme chose avec ton "if(file_exist("fichier-".$user['id'].".htm")) {traitement;}"
    comme ca, au moins, tu seras fixe.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    merci, je n'y avais as pensé sur le coup lol ^^

    bon bah je retourne finir mon système de cache, encore merci et bonne journée à vous :p

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Résultat du test
    Bonjour,

    Je suis tombé sur ce topic en recherchant sur Google.

    Voici le résultat de mes recherches :

    Sur une boucle de 100000 :

    Contrôle de l'existence d'un fichier par MySQL (lecture d'un enregistrement) : 18 secondes

    Contrôle de l'existence d'un fichier par file_exists : ~40 secondes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Ajouter un caractère dans requete SQL
    Par Dsphinx dans le forum Langage
    Réponses: 1
    Dernier message: 08/06/2007, 11h21
  2. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo