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 :

Manipulation de fichiers


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Manipulation de fichiers
    Salut à tous,
    je suis en stage et, débutant en PHP, on me demande d’écrire un script PHP qui sera lancé par un planificateur de taches.

    Le but est de récupérer le données de fichiers texte vers une base de données MySQL.

    Le problème c'est que les fichiers texte sont écrits au fur et à mesure dans un dossier et ont pour nom l'année, le mois, le jour, ...les nanosecondes, donc une chaine de 23 chiffres puis l'extension .txt.

    Je dois donc créer un script qui:

    1. scanne le répertoire,
    2. ouvre un fichier par ex. 20140522105433123456789.txt
    3. traite ce fichier (en insérant les données, formées de CHAMP:VALEUR X 7, dans une table d'une base de données déjà crée)
    4. enfin qui le déplace dans un dossier (Archivés)

    5. recommence jusque à ce que le dossier soit vide.


    Panique à bord pour moi, qui débute !!

    Auriez vous des idées sur une procédure à suivre (scan du dossier, ouverture fichier, etc...) après la connexion à la base qui n'est pas trop compliquée.

    Merci beaucoup pour votre aide.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    1 : Si tu n'as pas besoin de recursivité un simple DirectoryIterator suivi d'un foreach fera l'affaire pour lister les fichiers

    2: version courte avec file_get_contents ou file_put_contents. Version plus longue mais plus flexible avec fopen ,fwrite,fread ....

    3: Pour les bases de données c'est PDO

    4 : Pour déplacer un fichier (couper) on utilise rename , copy si on veux jute une copie

    5 : Une simple boucle tant que tu as des fichiers à traiter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $liste = new DirectoryIterator('/chemin/vers/dossier/');
    foreach ($liste as $fichier) {
        if(!$fichier->isDot()) {
            // Faire 2,3,4
        }
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Je te remercie pour ton aide
    c cool

    Par contre je vais peut etre revenir vers toi pour

    Citation Envoyé par grunk Voir le message

    3: Pour les bases de données c'est PDO
    A Plus

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Au fait...
    Au fait comme je traduis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!$fichier->isDot()) {
            // Faire 2,3,4
    ??????

    isDot ???
    Faire 2,3,4 ???

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut pas de PDO
    Mon tuteur ne veut pas de PDO pour la BDD.
    Donc il faut faire ça à l'ancienne.

    Mais comment ?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Quoi ?
    Tu peux lui proposer mysqli à la rigueur, mais s'il t'oblige à conserver mysql_*, il serait bon qu'il explique pourquoi utiliser des fonctions obsolètes et plus maintenues depuis de nombreuses années est pédagogique !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par kilo67 Voir le message
    isDot ???
    DirectoryIterator::isDot
    Quand tu parcours un dossier, tu vas toujours récupérer le "fichier" . (qui est le dossier courant lui-même) et le "fichier" .. (qui est le dossier parent) et qu'il ne faut pas traiter.

    Pour la BDD, si c'est une base MySQL, utiliser l'API mysqli en mode procédural va beaucoup ressembler aux fonctions mysql_ d'origine, ça ne devrait pas trop perturber ton tuteur

    Pour le reste, ben faut lire quelques docs, en commençant par les liens que t'as donné grunk.
    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]

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Remarque que si tu veux t'assurer que le fichier soit composé de 23 chiffres suivis de l'extension .txt tu peux le faire en une ligne avec RegexIterator combiné à DirectoryIterator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste = new RegexIterator(new DirectoryIterator($dossier),'/^[0-9]{23}\.txt$/i');
    Ainsi tu n'auras pas besoin de filtrer plus, sauf si le dossier cible peut inclure des sous dossiers dont le nom est composé de 23 nombres avec l'extension .txt. Dans ce cas tu peux filtrer une seconde fois avec isFile() pour t'assurer que tu as affaire à un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ($liste as $fichier) 
    {
        if($fichier->isFile()) 
       {
           // Faire 2,3,4
        }
    }
    Pour le reste il est évident qu'employer l'extension mysql_ de nos jours est vivement déconseillé. Notamment par le manuel php ici. Et concrètement l'extension mysql_ n'est plus installée par défaut dans php 5.5. Evidemment tous les hébergeurs vont l'activer pour compatibilité avec les anciens scripts mais cela donne bien le ton. Aujourd'hui c'est soit mysqli_ soit pdo.
    D'autant qu'apparemment le script que tu fais est autonome puisqu'il s'agit d'un cron, et donc pas d'excuse de compatibilité avec d'autres scripts existants

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Merci mais ??
    Merci les gars je vais me pencher sur vos conseils.

    Maintenant suite à la réunion de ce matin mes tuteurs m'ont dit de formater le fichier en xml, qu'il serait plus facile à traiter avec php.
    J'ai modifié la partie en rouge de mon script:

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
    Date=$(date +%Y%m%d%H%M%S%N)
    ...
    SERVICE ALERT:
    Type Notification: $NAGIOS_NOTIFICATIONTYPE
    Service: $NAGIOS_SERVICEDISPLAYNAME
    Sur hote: $NAGIOS_HOSTALIAS
    Etat: $NAGIOS_SERVICESTATE
    ID Service: $NAGIOS_SERVICESTATEID
    Descriptif: $NAGIOS_SERVICEOUTPUT
    Date Heure: $NAGIOS_SHORTDATETIME
    ...

    J'ai ça:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
    <?xml version="1.0" encoding="UTF-8"?>
    <notification>
       <alerte>Service</alerte>
       <typenotif>$NAGIOS_NOTIFICATIONTYPE</typenotif>
       <svc>$NAGIOS_SERVICEDISPLAYNAME</svc>
       <hote>$NAGIOS_HOSTALIAS</hote>
       <adresse_ip>$NAGIOS_HOSTADDRESS</adresse_ip>
       <etat>$NAGIOS_SERVICESTATE</etat>
       <id_etat>$NAGIOS_SERVICESTATEID</id_etat>
       <descr>$NAGIOS_SERVICEOUTPUT</descr>
       <timestamp>$NAGIOS_SHORTDATETIME</timestamp>
    </notification>
    ...

    Avec des balises du genre <type> </type>
    ça c'est fait, mais en quoi ça va m'aider dans la rédaction de mon script php pour l'insertion des données dans la BDD Mysql ??

    J'ai envie de les tuer !!

    MERCI pour votre aide

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Parce que c'est un peu laborieux de lire un fichier texte ligne par ligne et de faire les tests pour récupérer les bons champs à insérer dans ta bdd. Si tu as une structure XML tu pourras éventuellement utiliser DOMDocument ou simpleXML et ce sera plus facile. Mais bon faudrait pas que vos fichiers soient très gros car le temps pour parser le fichier n'est pas négligeable. Le plus facile et le plus optimisé si vous avez le choix serait d'avoir vos fichiers au format CSV mais je suppose que tes tuteurs ont leur raison pour ne pas choisir ce format.

    Sinon ça m'étonne un peu qu'on te fasse faire ce genre de travail si tu débutes en php car cela demande un peu d'expérience et habituellement on ne commence pas par ça.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Oui mais
    Oui mais bon j'ai deux mois pour apprendre.
    Puis le format de sortie des fichiers c'est moi qui le choisit.
    Si la recup des données est plus facile avec csv je choisi de le mettre en csv.

    Le script que j'ai fait pour l'instant ne marche pas:
    Il devrait
    1. se connecter à la base (avant ou après la phase 3?)
    2. attribuer des valeurs aux dossiers
    3. chercher dans ces dossiers tous les fichiers ayant comme nom 23 chiffres et l'extension xml
    4. envoyer les données vers la base de données
    5. transferer les fichiers traités vers un autre dossier

    NE MARCHE PAS:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    set_time_limit(0);
    echo "starting";
    //mysql connection
    error_reporting(E_ALL ^ E_NOTICE);
    function connectMaBase(){
        $connexion = mysql_connect('localhost','root','');
        mysql_select_db('nagios_to_parcpc');
        if (mysql_select_db ('nagios_to_parcpc', $connexion) == false)
            die ("Serveur inaccessible");
    }
    echo "connecte a la base
    
    ";
     
    // on atrribue des variables au dossiers
    $dossierencours="C:\Documents and Settings\900204\Bureau\Test";
    $dossiertraite="C:\Documents and Settings\900204\Bureau\Traités";
    // On ouvre le dossier a traiter
    $dossier = opendir ($dossierencours);
    // on lit le dossier que on a chargé
    $lecture = readdir ($dossier);
    // on selectionne que les fichiers xml avec des noms de 23 nombre
    $liste = new RegexIterator(new DirectoryIterator($lecture,'/^[0-9]{23}\.xml$/i');
    if (!empty ($liste))
        exit;
    else{
    // pour chaque fichier on extrait le contenu
        foreach ($liste as $file)
            $contenu = file_get_contents($file);
    }
    mysql_query("INSERT INTO notifications (Alerte, Type_Notification, Service, Hote, Adresse_IP, Etat, ID_Etat, Descriptif, Date_Heure)
        VALUES ('$alerte', '$typenotif', '$service', '$hote', '$adresse_ip', '$etat', '$descr', '$timestamp')");
     
    $filename = basename($file); //nom du fichier
    rename($file,"$dossiertraite/$filename_fini"); //déplace
    php?>
    Il me dit erreur à la ligne 25 ?

    Merci

  12. #12
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Et hormis "Ca marche pas", y a quoi comme message d'erreur qui apparaît ou dans les logs ?

    Sino où définis-tu $alert, $typenotif, $service.. ? De plus l'insertion devrait se faire dans la boucle si je ne m'abuse.

    Et je ne vais faire que radoter une fois de plus ce qui a été dis au dessus, vraiment aujourd'hui c'est "mysqli_" ou PDO mais commencer un nouveau développement en utilisant l'extension "mysql_", c'est juste... pas possible.

    Dernière chose, vire tout de suite ce mot de passe de ton précédent message.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Merci je te remets le script que j'ai modifié mais il ne fait pas ce que je lui demande,
    il doit manquer une ligne,

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
     
    error_reporting(E_ALL ^ E_NOTICE);
     
    // variables de connexion a la base
    $serveur = "localhost";
    $base = "nagios_to_parcpc";
    $user = "root";
    $pass = "";
     
    //variables des dossiers de traitement
    $dossierencours="C:/Documents and Settings/900204/Bureau/Test";
    $dossiertraite="C:/Documents and Settings/900204/Bureau/Archivage";
     
    // connexion à MySQL
    $mysqli = new mysqli($serveur, $user, $pass, $base);
    if(mysqli_connect_errno()) { 
    printf ("Echec de la connexion:%s\n",mysqli_connect_error());
    exit();
    }
    echo 'Information sur le serveur : '.$mysqli->host_info;
     
    // on selectionne que les fichiers xml
    $liste = glob($dossierencours."/*.xml");
     
    // pour chaque fichier on extrait le contenu
    foreach ($liste as $file)
    {
        echo "traitement de $file <br/>\n";
        $contenu = file_get_contents($file);
        $xml = simplexml_load_string($contenu);
     
        $insertion = mysql_query("INSERT INTO notifications (Alerte, Type_Notification, Service, Hote, Adresse_IP, Etat, ID_Etat, Descriptif, Date_Heure) VALUES ('$alerte', '$typenotif', '$service', '$hote', '$adresse_ip', '$etat', '$descr', '$timestamp')");
     
        $filename = basename($file); //nom du fichier
        rename($file,"$dossiertraite/${filename}_fini.xml"); //déplace
     
    }
     
    // deconnexion de la base
    $mysqli->close();
    La connexion à la base se fait bien par contre le script n’insère pas les données dans la table.
    Comme si la requête mysql était mal paramétrée.
    Pourquoi?

    Merci pour votre aide

  14. #14
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Las sortie des fichiers avant l'insertion en base est:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    traitement de C:/Documents and Settings/900204/Bureau/Test/201405190631124567890
    12.xml <br/>
    SimpleXMLElement Object
    (
        [alerte] => Service
        [typenotif] => RECOVERY
        [service] => service-vidal_hoptimal_server
        [hote] => terra
        [adresse_ip] => 172.19.0.16
        [etat] => OK
        [id_etat] => 0
        [descr] => 1 process named medicament.exe ( 0)
        [timestamp] => 2014-05-19 06:31:12
    )
    traitement de C:/Documents and Settings/900204/Bureau/Test/201405200837092345678
    90.xml <br/>
    SimpleXMLElement Object
    (
        [alerte] => HOST
        [typenotif] => RECOVERY
        [service] => SimpleXMLElement Object
            (
            )
     
        [hote] => info_stage_1
        [adresse_ip] => 192.168.12.89
        [etat] => UP
        [id_etat] => 0
        [descr] => PING OK -  Paquets perdus = 0%, RTA = 2.07 ms
        [timestamp] => 2014-05-20 08:37:09
    )
    traitement de C:/Documents and Settings/900204/Bureau/Test/201405200837093456789
    01.xml <br/>
    SimpleXMLElement Object
    (
        [alerte] => HOST
        [typenotif] => RECOVERY
        [service] => SimpleXMLElement Object
            (
            )
     
        [hote] => info_stage_1
        [adresse_ip] => 192.168.12.89
        [etat] => UP
        [id_etat] => 0
        [descr] => PING OK -  Paquets perdus = 0%, RTA = 0.76 ms
        [timestamp] => 2014-05-20 08:37:09
    )
    traitement de C:/Documents and Settings/900204/Bureau/Test/201405201156171234567
    89.xml <br/>
    SimpleXMLElement Object
    (
        [alerte] => Service
        [typenotif] => RECOVERY
        [service] => service-spouleur_dimpression
        [hote] => info_stage_1
        [adresse_ip] => 192.168.12.89
        [etat] => OK
        [id_etat] => 1
        [descr] => 1 services active (named "Spouleur d'impression") : OK
        [timestamp] => 2014-05-20 11:56:17
    )
    traitement de C:/Documents and Settings/900204/Bureau/Test/201405230302550123456
    78.xml <br/>
    SimpleXMLElement Object
    (
        [alerte] => HOST
        [typenotif] => PROBLEM
        [service] => SimpleXMLElement Object
            (
            )
     
        [hote] => iris
        [adresse_ip] => 172.19.0.205
        [etat] => OK
        [id_etat] => 3
        [descr] => CRITIQUE - H├┤te inaccessible (172.19.0.205)
        [timestamp] => 2014-05-23 03:02:55
    )
     
    C:\Documents and Settings\900204\Bureau\Test>
    Comme dois je traiter ces éléments (SimpleXMLElement Object) avant de formuler la requete mySQL ?

    Merci

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Et si tu travaillais par étape en testant au fur et à mesure ce que tu fais ? Deux mois ça va pas être suffisant si tu teste sans comprendre ce que tu fais.

    Dans un premier temps tu dois récupérer des fichiers pour pouvoir les exploiter. Je t'avais donné le code mais tu a utilisé DirectoryIterator() sur le résultat d'un readdir, pas étonnant qu'il y ait une erreur et puis tu avais oublié une accolade. C'est directement le dossier qu'il faut mettre en paramètre comme pour glob() sauf que DirectoryIterator() est plus puissant que la fonction glob() quand on la combine avec RegexIterator.

    Par ailleurs tu auras plus de chances que cela fonctionne si tu indiques le chemin des dossiers par rapport au script en cours.

    En admettant que ton script soit à la racine du site et que ton dossier de fichiers qui s'appelle "test" soit également à la racine de site.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $dossier = "test";// chemin du dossier des fichiers par rapport au script en cours
     
    $liste = new RegexIterator(new DirectoryIterator($dossier),'/^[0-9]{23}\.xml$/i');// filtre les fichiers avec 23 chiffres suivis de .xml (i derrière le filtre pour accepter les variantes majuscules/minuscule dans le terme xml)
     
    foreach ($liste as $fichier) 
    {
       echo $fichier->getPathname();
       echo '<br>';
    }
    Est-ce que tu as maintenant affiché tous tes fichiers ? Si non il y a une erreur dans le chemin du dossier ou ton dossier ne contient pas de fichiers avec 23 chiffres suivi de .xml. Essaies de faire fonctionner ça ensuite tu pourras aller plus loin.

    Et puis n'avais-tu pas dis que tu pouvais choisir le format csv, je vois que tu testes des fichiers xml ?

  16. #16
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut C'est OK
    Citation Envoyé par ABCIWEB Voir le message
    1) Est-ce que tu as maintenant affiché tous tes fichiers ? Si non il y a une erreur dans le chemin du dossier ou ton dossier ne contient pas de fichiers avec 23 chiffres suivi de .xml. Essaies de faire fonctionner ça ensuite tu pourras aller plus loin.

    2)Et puis n'avais-tu pas dis que tu pouvais choisir le format csv, je vois que tu testes des fichiers xml ?
    1)

    Oui ca marche j'ai:

    C:/Documents and Settings/900204/Bureau/Test\20140519063112456789012.xml<br>C:/D
    ocuments and Settings/900204/Bureau/Test\20140520083709234567890.xml<br>C:/Docum
    ents and Settings/900204/Bureau/Test\20140520083709345678901.xml<br>C:/Documents
    and Settings/900204/Bureau/Test\20140520115617123456789.xml<br>C:/Documents and
    Settings/900204/Bureau/Test\20140523030255012345678.xml<br>

    comme retour
    Donc jusque là tout va bien, maintenant pour extraire les données des fichiers j'utilise quoi?
    file_get_contents ?

    2)

    Le tuteur veut que ce soit du xml car ils disent que c'est standardisé et que le csv ne gere pas le retour chariot.

    Alors il m'ont entré simplexml_load_string et à la sortie j'ai un format du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SimpleXMLElement Object
    (
        [alerte] => Service
        [typenotif] => RECOVERY
        [service] => service-vidal_hoptimal_server
        [hote] => terra
        [adresse_ip] => 172.19.0.16
        [etat] => OK
        [id_etat] => 0
        [descr] => 1 process named medicament.exe ( 0)
        [timestamp] => 2014-05-19 06:31:12
    )
    que je n'arrive pas à rentrer dans la base.
    Au fait il me crée une ligne (1 seule) mais il n'insere pas les variables

    Merci de ton aide.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Resolu
    Maintenant il ne me reste plus que quelque problème d'insertion en base, du genre 8 champs remplis sur 9 mais je vais essayer de le resoudre.

    Au fait les données n'étaient pas inserées à cause d'une mauvaise conception de la base,
    càd
    la clé primaire était affectée à un champ dont les données peuvent etre identiques et donc l'erreur etait
    DUPLICATE PRIMARY KEY

    J'aurais du commencer par là.

    Je tiens à remercier vous tous qui m'avez aidé.

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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