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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Ouvrir une seule fois un fichier xml


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut [SimpleXML] Ouvrir une seule fois un fichier xml
    Bonjour à tous,

    J'ai un fichier xml que je dois appeler depuis 3 classes. J'utilise la fonction simplexml_load_file ('monficher.xml') pour charger les données.

    Mais je veux éviter que le fichier xml soit chargé 3 fois (Perte de temps, surtout que c'est le même fichier).

    J'ai pensé à utiliser le singleton pour ouvrir 1 seule fois le fichier peut importe le nombre d'appele du fichier.

    Ma question est: est-ce que "simplexml_load_file" gère lui même tout ca,c-a-d qu'il crée une seule instance peut importe le nombre de fois qu'on appele le fichier, ou bien je dois passer par un singleton.

    J'utilise le php.

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Non, PHP ne gère pas cet aspect en interne, ce sera donc à vous de l'implémenter.

    Attention tout de même, en PHP la persistance en mémoire de données n'existe pas réellement et un objet de type singleton ne sera partagé que par le script courant (ce qui inclue ses inclusions).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Citation Envoyé par julp Voir le message
    Attention tout de même, en PHP la persistance en mémoire de données n'existe pas réellement et un objet de type singleton ne sera partagé que par le script courant (ce qui inclue ses inclusions).

    Donc un singleton doit être présent sur chaque classe (script) afin d'éviter que le script lit plusieurs fois le même fichier xml?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    A moins d'utiliser la variante multiton ...

    Cela dit ça peut devenir assez consommateur en ressources suivant le nombre de fichiers lus et la taille de chacun.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Bonjour julp,

    Là j'utilise mon singleton sur les 3 classes php, puisque les 3 classes ont besoin du même fichier xml.

    Mais il ya quelque chose qui me préoccupe.

    Admettons qu'il ya 10 personnes à la fois qui utilisent mon fichier xml. (En lecture).Admettons aussi qu'ils utilisent juste 1 des trois classes.

    Étant donné que j'ai un singleton dans cette classe, est-ce que mon fichier xml va être ouvert une seule fois même si il est utilisé par 10 personnes ? (Premier arrivé, premier qui ouvre le fichier).Et quand l'instance va être terminé ? (c-a-d fichier fermé), et quand elle sera recréer (réouverture du fichier)

    Comment tout ca fonctionne au juste ?

    Merci

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Comme dit plus haut, aucun script (peu importe ce qu'il contient) ne reste en mémoire. Le singleton ne sera valable que pour le script courant appelé. Autrement dit si vous avez 10 clients (simultanés ou non), 10 singletons seront créés avec ce qu'il gère. C'est le principe même de PHP (interprétation de script) : le singleton n'est "effectif" qu'au script lui-même et à ceux qu'ils appellent (inclusions). Il faut voir chaque exécution de script comme un processus distinct et indépendant des autres.

    Les sessions permettent, par exemple, d'assurer une certaine persistance à des données mais vous êtes limités (comme pour tout le reste) aux variables qui ne sont pas de type ressource (un SimpleXMLElement possède en interne de tels attributs - puisque basé sur libxml2 - ce qui le rend non sérialisable).

Discussions similaires

  1. Ouvrir une seule fois la fenêtre pop-up
    Par karamaster dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 17/12/2013, 18h28
  2. charger une seule fois un fichier properties
    Par aureliend8800 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/05/2013, 22h09
  3. securite sur une seule page et fichier xml
    Par deathsurfer dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 20/07/2009, 03h00
  4. ouvrir la page une seule fois
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 16/03/2007, 11h38
  5. Ouvrir une application une seule fois - numero de process
    Par lefabdepau dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/02/2007, 13h12

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