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 :

simplexml_load_file me fait tourner la tête! [PHP 5.4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Par défaut simplexml_load_file me fait tourner la tête!
    Bonjour,

    Je suis nouvelle ici, donc je vais essayer de présenter les choses bien! Si ce n'est pas le cas, veuillez m'excuser, et n'hésitez pas à me reprendre!
    Aussi je sors tout juste de formation en développement donc je suis une noob! Merci de garder ce petit détail en tête pour la suite!

    Voici mon problème,
    J'ai un script PHP qui doit
    1) ouvrir un répertoire dont l'URL a été renseigné dans une variable,
    2) Parcourir ce répertoire et ouvrir chacun des fichiers XML qu'il contient,
    3) Pour chaque fichier il doit extraire et stocker le contenu de deux balises
    <FLX_REF> </FLX_REF> pour obtenir le nom du fichier
    <NBR_ELT> </NBR_ELT> pour obtenir le nombre de flux dans le fichier
    4) Stocker ces informations dans deux tableaux différents.
    Le premier tableau sert à comptabiliser le nombre de fichier qui portent le même nom et donc faire la somme de leur contenu.
    Le second tableau sert à stocker le détail de chaque flux.
    Ces tableaux me serviront plus tard à générer le contenu d'un fichier Excel.

    Je ne peux pas vraiment vous montrer le contenu d'un flux XML car il contient des données sensibles, mais voici son squelette :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <FLUX>
    ...
       <FLX_REF>nom du fichier</FLX_REF>
    ...
       <NBR_ELT>1234</NBR_ELT>
    ...
    ...
    </FLUX>
    Voici mon petit script:

    Code php : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $v_repertoire = opendir($v_URL);
    while(FALSE !== $v_fichier = readdir($v_repertoire)){
      //Certains flux bien précis ne doivent pas être lu...
      if(substr("$v_fichier", -5, 1) == 0){
        $o_xml = simplexml_load_file("$v_fichier");
        //extraire le nom complet du flux et le stocker 
        $v_nom_long_flux = $o_xml->FLUX->FLX_REF;
        //extraire le nombre d'éléments du flux et le stocker
        $v_nb_docs = $o_xml->FLUX->NBR_ELT;
        //extraire le nom court du flux et le stocker (retirer les 22 derniers caractères car il différencie les fichiers entre eux)
        $v_nom_court_flux= substr("$v_nom_long_flux", 0, -22);
        //Tester le nom du flux
        //stocker infos dans tableau de références
        foreach($t_references as $v_nom_flux){
            if($v_nom_court_flux == $v_nom_flux){ //Si ce nom apparait déjà dans le tableau de référence 
                $v_occurences++; //incrémenter 'Nombre de fichier'
                $v_total_documents = $v_total_documents + $v_nb_docs; //calcule 'Nb total de documents'
            }else{ 
                $v_nom_flux = $v_nom_court_flux;//ajouter le flux de données au tableau de références
                $v_occurences++; //incrémenter 'Nombre de flux'
                $v_total_documents = $v_nb_docs; 
            }
        }
    //stocker les infos dans tableau reprenant le détail de chaque flux
        foreach($t_details as $v_nom_complet->$v_nb_elements){
            $v_nom_complet = $v_nom_long_flux;
            $v_nb_elements = $v_nb_docs;
        }
        fclose($v_fichier);
      }
    }

    Et voici le résultat de mon script :
    Warning: simplexml_load_file(.) [function.simplexml-load-file]: failed to open stream: Permission denied in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 124

    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "." in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 124

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 126

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 126

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 128

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 128

    Warning: fclose() expects parameter 1 to be resource, string given in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 148

    Warning: simplexml_load_file(..) [function.simplexml-load-file]: failed to open stream: Permission denied in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 124

    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity ".." in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 124

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 126

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 126

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 128

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 128

    Fatal error: Cannot access empty property in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 144
    Je ne comprends pas vraiment ces erreurs, ou en tout cas leurs provenance, ni comment les résoudre... Alors merci de m'éclairer de vos lumières!

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Sauf erreur de ma part readdir renvoie un nom de fichier. Or simplexml_load_file a besoin d'un chemin d'accès.
    Du coup, je pense qu'il faut que tu reconstruises le chemin avec quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $v_chemin = $v_repertoire.PATH_SEPARATOR.$v_fichier;
    $o_xml = simplexml_load_file($v_chemin);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Par défaut
    J'avais trouvé cette façon de le coder dans plusieurs tutoriels, mais maintenant que tu fais cette réflexion, je trouve effectivement ça bizarre!

    J'ai fait le changement que tu as proposé, mais ça me génère les erreurs suivantes :
    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "Resource id #53;." in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 125

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 127

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 127

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 129

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 129

    Warning: fclose() expects parameter 1 to be resource, string given in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 149

    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "Resource id #53;.." in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 125

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 127

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 127

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 129

    Notice: Trying to get property of non-object in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 129

    Fatal error: Cannot access empty property in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 145
    C'est quasiment les mêmes que précédemment si ce n'est qu'il n'y a plus cette histoire de "Permission denied "...
    Je ne comprends vraiment pas ce qui bloque pour l'ouverture...

  4. #4
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Par défaut
    Je ne sais pas si c'est un détail important mais, quand on regarde cette première erreur :
    I/O warning : failed to load external entity "Resource id #53;."
    on peut voir qu'il y a un point après le ;
    Je ne sais pas du tout d'où il vient ou si c'est normal...

    EDIT : Je suis vraiment une noobies!
    Je suppose que le point que je vois est le résultat du PATH_SEPARATOR, et ça voudrait dire que ma variable $v_fichier est vide... mais pourquoi?

    EDIT2 : Je suis un peu un spam mais je découvre en même temps...
    Quand je fais un echo sur mes variables j'obtient ça:
    pour ma variable $v_URL : j'obtient bien mon URL sur le réseau de l'entreprise dans laquelle je suis en stage (donc je peux pas trop l'écrire)
    pour ma variable $v_fichier : .
    pour ma variable $v_chemin : Resource id #53;.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Et je suis pas beaucoup mieux : j'ai confondu PATH_SEPARATOR et DIRECTORY_SEPARATOR et je n'ai pas fait attention au fait que $v_repertoire était le retour de oppendir()

    Quant au point, c'est normal : quand tu parcours un dossier il continue toujours . (le répertoire courant) et .. (le répertoire parent)

    Donc il faut donc que tu ajoutes une condition pour ne pas utiliser . et .. et que tu utilises $V_URL comme racine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (substr("$v_fichier", -5, 1) == 0 && $v_fichier != '.' && $v_fichier != '..') {
        $v_chemin = $v_URL.DIRECTORY_SEPARATOR.$v_fichier;
        $o_xml = simplexml_load_file($v_chemin);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Par défaut
    Merci beaucoup, effectivement maintenant mon script n'a plus d'erreur! Ca m'ouvre bien mes fichiers, toussa! *BONHEUR*
    Merci!!!

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

Discussions similaires

  1. Elle fait tourner la tête
    Par gassi64 dans le forum OpenCV
    Réponses: 7
    Dernier message: 10/07/2008, 17h09
  2. Gridview.DataKeyNames n'en fait qu'à sa tête
    Par davidso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/03/2007, 09h13
  3. le menu qui n'en fait qu'à sa tête
    Par Invité dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 09/11/2006, 11h32

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