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 :

Accès concurents sur fichier log


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut Accès concurents sur fichier log
    Bonjour à tous,

    Dans le cadre d'une application web, j'utilise un fichier de log afin de garder une trace des erreurs et autres exceptions survenues. Pour l'instant, les tests ce sont toujours effectués sur une machine locale dont j'étais le seul utilisateur.

    Cependant, lorsque l'application sera disponible en ligne, et donc utilisable simultanément par X personnes, je me demande comment faire pour gérer le cas ou surviendront 2 écritures simultanées dans le fichier de log.

    Existe-t-il un système de "mutex" en PHP qui permettrait de garantir l'atomicité d'une écriture dans un fichier ?

    Merci d'avance pour vos idées

  2. #2
    Membre averti Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Points : 392
    Points
    392
    Par défaut
    tu peux utiliser sleep pour faire patienter ton script si un autre user utilise ton fichier log.
    Le but de tout developpeur OO est de devenir une référence.
    Mon avatar est un ambigramme, les curieux peuvent le retourner ;-)
    Aider <> Faire a la place de!!!

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Tu peux utiliser un fichier 'verrou.txt'. Quand tu veux faire une modif de ton fichier de log, tu vérifies dans verrou.txt si le verrou est à non. Dans ce cas, tu le passes à oui, puis tu modifies ton fichier de logs, puis enfin tu repasses le verrou à non. Si le verrou est à non, tu attends qu'il passe à oui.
    Sinon, tu utilises une bdd qui gère toute seule ces problèmes.

  4. #4
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut
    Merci pour vos suggestions.
    Cependant, l'idée du fichier 'verrou.txt' entraine exactement le même problème qui se produira lorsque 2 processus effectueront leur vérification exactement au même instant

    N'y a-t-il pas d'autres alternatives à l'utilisation d'une BD?

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    On est quand même là au niveau du centième de seconde au moins. As-tu un réel risque qu'une collision se produise pendant le changement du verrou ? Et est-ce dramatique ?

  6. #6
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    sinon, toujours en partant sur la base du verou.txt, ou lieu d'écrire dedans, pourquoi ne pas le crée et le détruire quand c'est bon?
    Tout énigme a une solution ! Tout est question de discipline !

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    regarde les fonctions flock.
    Par contre sa fonctionne très très mal sous windows.
    Par exepérience les flock sous windows ne garantissent pas l'accès singulier à un fichier à un moment T.

    J'avais lu par contre sous unix et unix like le problème ne se posait pas, mais je n'ai jamais vérifié.

    cf http://fr2.php.net/flock

    notamment :
    $fp = fopen($logFileName, 'a');
    $canWrite = false;
    //Waiting until file will be locked for writing
    while (!$canWrite) {
    $canWrite = flock($fp, LOCK_EX);
    }
    //file was locked so now we can store information
    fwrite($fp, $toSave);
    fclose($fp);

  8. #8
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Peux-être que les sémaphores peuvent t'être utiles.

    http://fr.php.net/manual/fr/function.sem-acquire.php
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

Discussions similaires

  1. Acces concurents sur *.js
    Par Georges_Lauret dans le forum XMLRAD
    Réponses: 0
    Dernier message: 24/08/2009, 09h42
  2. Liens / acces temporaire sur fichier IIS
    Par Hexanium dans le forum IIS
    Réponses: 0
    Dernier message: 18/03/2008, 13h00
  3. acces concurent à des fichiers sur le serveur
    Par al3alwa dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 08/06/2007, 15h41
  4. Question bête: accés concurent à un fichier texte
    Par djynwk dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 00h54
  5. Acces concurents sur un fichier
    Par TobyKaos dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2006, 23h30

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