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 :

Que veux dire "résultat mis en cache" pour file_exists?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut Que veux dire "résultat mis en cache" pour file_exists?
    Bonjour,

    Bon je sais ce que cela veut dire en théorie, si je fais un premier file_exists le script regarde si le fichier existe vraiment, met le résultat du test en cache et le réutilise pour le prochain file_exists fait sur le même fichier, ce qui évite de re-tester si le fichier existe. Oui mais j'ai essayé un truc et ca n'a pas l'air de coller:

    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
    17
    18
    19
    echo "prem ".file_exists("essai43.txt")."<br>";
    // le resultat affiché par echo est false, ce qui est normal, le fichier 
    //n'existe pas encore
     
    file_put_contents("essai43.txt","contenu");
    //création du fichier
     
    echo "deux ".file_exists("essai43.txt")."<br>";
    // le resultat affiché par echo est true, ce qui peut sembler logique: 
    //on a fait une operation sur le fichier, donc au lieu d'utiliser le 
    //résultat en cache, php re-teste si le fichier existe
     
    sleep(20);
    // je me laisse 20 secondes pour effacer le fichier essai43.txt à la main
     
    echo "trois ".file_exists("essai43.txt")."<br>";
    //le resultat affiché par echo est false, pourquoi??? Si le dernier 
    //résultat de file_exists a été mis en cache, la fonction devrait 
    //retourner true, même si le fichier a été effacé...?

  2. #2
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Je te donne mon avis, mais il vaut ce qu'il vaut

    Si on considère le fait que la fonction file_exists("essai43.txt") s'exécute à chaque fois qu'elle est invoquée. Il n'y a pas de question de cache là dedans, sinon, je ne te dis pas les problème que cela pourrait occasionner.
    Au premier lancement le fichier existe, donc "true".
    Au second, le fichier n'y est plus, doc "false".

    Si tu veux être sure (ou pas d'ailleurs) de ce que j'annonce, au lieu de faire un sleep et d'effacer le fichier à la mano, tu lance une commande unlink("essai43.txt");

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par riete Voir le message
    Je te donne mon avis, mais il vaut ce qu'il vaut

    Si on considère le fait que la fonction file_exists("essai43.txt") s'exécute à chaque fois qu'elle est invoquée. Il n'y a pas de question de cache là dedans, sinon, je ne te dis pas les problème que cela pourrait occasionner.
    Au premier lancement le fichier existe, donc "true".
    Au second, le fichier n'y est plus, doc "false".

    Si tu veux être sure (ou pas d'ailleurs) de ce que j'annonce, au lieu de faire un sleep et d'effacer le fichier à la mano, tu lance une commande unlink("essai43.txt");
    Non non, il a raison (même si je ne sais pas expliquer pourquoi le cache ne semble pas être utilisé dans son code) :
    http://php.net/clearstatcache

  4. #4
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    Ça me rappelle ce sujet :
    http://www.developpez.net/forums/d59...uite-creation/

  5. #5
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Après une coupure prolongée, je peux enfin répondre à ton message Eusebe
    tu a 100% raison comme lysandre. J'avoue humblement que je découvre une travers de PHP que je ne connaissais pas.

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Hmmm le cas de la mise en cache de return de la fonction file_exists se fait uniquement lors de l'utilisation de la fonction stat() ou lstat() comme dit dans PHP Manual (voir le lien de Eusebe).

    Vu que cette fonction n'est pas utilisée dans son code, le file_exists n'est pas mis en cache... et renverra donc FALSE après les 20 secondes si le fichier a été supprimé

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Hmmm le cas de la mise en cache de return de la fonction file_exists se fait uniquement lors de l'utilisation de la fonction stat() ou lstat() comme dit dans PHP Manual (voir le lien de Eusebe).

    Vu que cette fonction n'est pas utilisée dans son code, le file_exists n'est pas mis en cache... et renverra donc FALSE après les 20 secondes si le fichier a été supprimé
    Je ne suis pas d'accord...
    Citation Envoyé par Doc PHP
    Si vous appelez file_exists() sur un fichier qui n'existe pas, la fonction retournera FALSE jusqu'à ce que vous créiez le fichier. Si vous créez le fichier, la fonction retournera TRUE même si vous effacez le fichier.
    Et dans les commentaires qui suivent :
    It should be noted that a call to any of those functions will cache all of the file's information, not just the information that is returned.

Discussions similaires

  1. que veux dire ce message d'erreur
    Par lila23 dans le forum Débuter
    Réponses: 22
    Dernier message: 18/03/2009, 16h57
  2. Réponses: 1
    Dernier message: 15/03/2007, 12h25
  3. Que veux dire _("chaine") sous gnu/linux?
    Par trois_1 dans le forum C
    Réponses: 3
    Dernier message: 25/08/2006, 14h12
  4. Que veux dire cette fonction
    Par Vlacar dans le forum ASP
    Réponses: 2
    Dernier message: 10/04/2006, 13h28
  5. que veux dire complexitée ...
    Par phakso dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 04/03/2006, 15h51

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