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 :

Ecrire au début d'un fichier txt


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Par défaut Ecrire au début d'un fichier txt
    Bonjour,
    Léger problème dans un de mes scripts PHP.
    Je suis en train de développer une fonction qui enregistre dans un fichier txt les erreurs récupérées dans un try... catch, en les classant de la date la plus récente à la plus ancienne.
    Mais je ne parviens pas à les classer dans cet ordre, toutes les nouvelles données sont inscrites à la suite de mon fichier, et non pas au début, comme je le voudrais.
    Exemple de mon script :

    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
     
    try
    {
        $connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_db, $PARAM_user, $PARAM_pwd);
    }
    catch(Exception $e)
    {
        $erreur = $e->getMessage();
        $numero = $e->getCode();
        $dateErreur = date("Y-m-d H:i:s"); //AAAA-MM-JJ HH:MM:SS
        $f = "erreurs/rapport.txt";
     
        // Ouverture du fichier.
        $rapport = fopen($f, "r+"); // r+ : Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier. 
     
        // Récupération du contenu.
        $message = file_get_contents($f);
     
        // Place le pointeur au début du fichier.
        rewind($rapport);
     
        // Écriture dans le fichier.
        $message .= "[".$dateErreur."] - Erreur ".$numero." : ".$erreur;
        fputs($rapport, $message);
     
        // Fermeture du fichier.
        fclose($rapport);
    }

    Et voici ce que je récupère dans mon fichier :
    [2011-06-24 22:22:27] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
    [2011-06-24 22:22:30] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
    [2011-06-24 22:22:33] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

    Or donc, ce que je veux, c'est avoir :
    [2011-06-24 22:22:33] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
    [2011-06-24 22:22:30] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
    [2011-06-24 22:22:27] - Erreur 0 : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

    Si vous pouviez m'éclairer.
    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Par défaut
    file_get_contents() lit le fichier et n'as pas besoin qu'il soit déjà ouvert puisqu'il prend le nom du fichier et non un file_descriptor. Tu peux donc l'appeler en premier et ensuite ouvrir le fichier avec fopen().

    Puisque file_get_contents() ne touche pas au file_descriptor, tu n'as pas besoin de faire un rewind().

    Puisque tu vas grossir le fichier en remettant tout le texte, autant mettre comme mode "w".

    Dernier truc pour l'ordre, tu fais "$message .= " ce qui veut dire que tu ajoutes à la fin de cette variable.

    Le code final serait donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Récupération du contenu.
    $message = file_get_contents($f);
     
    // Ouverture du fichier.
    $rapport = fopen($f, "w");
     
    // Écriture dans le fichier.
    $nouveaumessage = "[".$dateErreur."] - Erreur ".$numero." : ".$erreur;
    $nouveaumessage .= $message;
    fwrite($rapport, $nouveaumessage);
     
    // Fermeture du fichier.
    fclose($rapport);
    Ensuite, il y a une considération techniques à voir: plusieurs scripts appelés en même temps par plusieurs utilisateurs vont-ils s'écraser mutuellement (peut-être mettre un lock)

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Par défaut
    Merci de ton aide, je viens juste de voir mon erreur.

    C'est bien évidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = "[".$dateErreur."] - Erreur ".$numero." : ".$messageErreur.$message;
    Et non pas -_-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message .= "[".$dateErreur."] - Erreur ".$numero." : ".$erreur;

    Néanmoins, j'ai bien pris note de tes diverses remarques, et il est vrai que tes propositions me permettraient d'optimiser mon code.

    Quant au lock, c'est en effet une piste à suivre, même si ici, cela ne sera pas nécessairement utile, il n'y aura qu'une personne qui utilisera ce script.

    Merci.

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

Discussions similaires

  1. [C#] : Ecrire au début d'un fichier
    Par dcollart dans le forum C#
    Réponses: 2
    Dernier message: 25/09/2007, 15h21
  2. Ecrire au début d'un fichier d'un binaire
    Par cedouche dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 30/07/2007, 15h29
  3. Ecrire au début d'un fichier plat
    Par MayOL69bg dans le forum C#
    Réponses: 1
    Dernier message: 11/07/2007, 12h29
  4. Réponses: 2
    Dernier message: 05/04/2007, 09h39
  5. Ecrire au début d'un fichier
    Par Core8 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 15/02/2007, 11h28

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