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 :

Pb enregistrement contenu d'1 variable dans un fichier [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Pb enregistrement contenu d'1 variable dans un fichier
    Bonjour à tous,
    J'ai un petit souci, j'ai extrait le contenu d'un fichier obtenu avec un file_get_content puis j'ai filtré une partie des données avec un preg_match_all que j'ai envoyé dans $horaire. Jusque la tout vas bien, j'affiche même le resultats à l'écran et tout est parfait. Cependant j'aimerais conserver les résultats de cette variable dans un fichier($fichier). Le problème est que dans mon fichier il ne s'inscrit que seulement Array. !

    Voila mon code:
    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
    <?php 
     
    $adresse = 'http://www.example/index.php';
    $adresse2= "ftp://User:Password@monsite.com/horaire.html";
    $page = file_get_contents($adresse);
    echo $page;
    preg_match_all('/Nice ?.* Nancy/isx',$page,$horaire);
    print_r($horaire); //affichage du code filtré
    reset($horaire);
    $fichier = fopen($adresse2, "w");
    for($i=0; $i<count($horaire); $i++) 
    {
    print $horaire[$i]; //verification 
    fwrite ($fichier,"$horaire[$i]\n"); 
    }
     
    fclose($fichier);
    echo "<br/> Modification effectué avec succès <br/>" ;
     
    ?>
    Merci d'avance, cela fait 2 jours que je bloque la dessus...

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    plusieurs choses :

    1) il n'est pas tres propre d'écrire un tableau dans une chaine de caractere.
    Donc echo "$tableau[$indice]..."; est a proscrire.
    Utilise la concaténation a la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $tableau[$indice]."...";
    Eventuellement (mais totalement anti performant ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "{$tableau[$indice]}...";
    C'est aussi valable pour fwrite evidemment

    2) si tu as 300 elements dans $horaire, tu va faire 300 itérations de boucle... et donc 300 fwrite, ce qui correspond a 300 acces au disque... arg !
    Il est beaucoup plus rapide et beaucoup mieux de stocker tout ca dans une chaine de caractere et de faire UN SEUL fwrite (ou fputs) a la fin.
    Donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $chaine='';
    for(...) {
    $chaine.=$tableau[$indice]."\n"; // concaténation
    }
    fputs($fichier, $chaine);
    3) encore mieux que précédemment, si tu veux transformer $tableau en chaine de caractere séparée par des \n, pas besoin de boucle !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=implode("\n", $tableau);
    tu évites ainsi la boucle, tu évites le recalcul du nombre d'élement de $horaire a chaque tour de boucle également (count($horaire) dans la condition de fin du for)

    4) reset($horaire) ne sert a rien, a utiliser uniquement si tu utilise la fonction "each" sur ton tableau.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour Fladnag et merci de m'avoir répondu.
    J'avais bien l'impression que je me mélangeait les pinceaux entre tableau et chaine de caractère et tu viens de me le confirmer!

    Cependant, pour que je puisse mieux comprendre tes recommandations, pourrait tu utiliser mes noms de variable dans tes exemples de code ?

    Je suis encore novice en PHP et il m'a fallut 2 soirée pour pondre ce code...

    Te remerciant d'avance.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    reset($horaire);
    $fichier = fopen($adresse2, "w");
    for($i=0; $i<count($horaire); $i++) 
    {
    print $horaire[$i]; //verification 
    fwrite ($fichier,"$horaire[$i]\n"); 
    }
     
    fclose($fichier);
    apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $chaine = implode("\n", $horaire);
    echo "<pre>$chaine</pre>"; // verification
    $fichier = fopen($adresse2, 'w');
    fputs($fichier, $chaine);
    fclose($fichier);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci pour la MAJ du code, mais cependant j'arrive toujours au meme résultat:
    le contenu de mon fichier est toujour Array et dans la phase de vérification il ne m'affiche à l'écran que Array aussi!

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    c'est parce que preg_match_all renvoi un tableau de tableau...

    donc juste apres preg_match_all :


  7. #7
    Membre régulier
    Avatar de titoon
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 86
    Points
    86
    Par défaut
    Tu peux utiliser la fonction file_put_contents pour écrire le contenu d'un tableau dans un fichier

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Effectivement, à l'écran j'ai bien maintenant mon tableau qui s'affiche, mais dans mon fichier je n'ai toujours que Array...

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    supprime ton fichier, ferme le, et réessaye, ce qui tu affiche a l'ecran est totalement identique a ce qu'il écrit, donc si tu ne vois rien dans ton fichier c'est :
    * Soit que tu l'avais ouvert et que tu ne l'a pas rechargé
    * Soit qu'il ne l'a pas écrit a cause d'un probleme de droits

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Super, ça marche!
    Il fallait effectivement supprimer le fichier avant de lancer le script.
    Merci encore.

    Cependant, une autre petite question dans mon preg_match_all, est il possible de lui indiquer de ne pas inclure le dernier terme de la recherche dans la variable $horaire (en l'occurence: Nancy) ?

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

Discussions similaires

  1. Affichage contenu d'une variable dans JS
    Par tangjuncn dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 13h38
  2. Réponses: 3
    Dernier message: 06/02/2006, 17h04
  3. PB récupérez le contenu d'une variable dans une balise titr
    Par crevettepourrie dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2006, 17h41
  4. Réponses: 3
    Dernier message: 27/07/2005, 15h12

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