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 :

[Système] Avez vous deja utilisé flock ?


Sujet :

Langage PHP

  1. #1
    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 [Système] Avez vous deja utilisé flock ?
    Salut,

    J'écrit actuellement un script de gestion de log, et en fait j'ai un petit souci avec les acces concurrent.

    Mes logs sont écrit dans un fichier partagé par tout les scripts executé à un moment T.

    Pour pouvoir gérer les acces concurrents j'ai trouvé la fonction flock sur php.net.

    Seulement voila, après quelques test sur deux thread simultanés... bah ce n'est pas très concluant...

    Bref, l'avez vous déja utilisé avec succès ? Ou avez vous utilisé une sauce maison ?


    Pour info, voici ce que me donne certaines ligne de log ..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    O:7:"MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 2";s:17:" MesLogs message_";s:33:"===============================14";}
    5";}
    O:7:"MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 1";s:17:" MesLogs message_";s:39:"-----------------------------------1526";}
    Cette séquence la 5";} réprésente la fin d'une autre ligne de log et ne devraient pas exister...

    Autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    O:7:"MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 2";s:17:" MesLogs message_";s:34:"===============================385";}
    O:7:"MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 1";s:17:" MesLogs message_";s:39:"-----------------------------------5096";}
    MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 2";s:17:" MesLogs message_";s:34:"===============================387";}
    O:7:"MesLogs":2:{s:14:" MesLogs date_";s:12:"Im process 2";s:17:" MesLogs message_";s:34:"===============================388";}
    Ici il manque le début d'une ligne de log...

    Et surtout ce problème semble apparaître 40 fois sur 21 000 écritures... Cela représente pas mal de ratage de tout même.

    Sans compter que ces écritures non finies pourrissent mon système puisqu'elles me rajoutent des lignes qui ne devraient pas exister..

    Pour verrouiller l'accès j'utilise ce code, peut etre que je ne le fais pas correctement.
    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
            /* Ajoute une ligne dans le fichier de log courant */
            public function AddLine ( LogLine $Line )
            {
                /* ouverture du fichier */
                if( ! @$handle = fopen($this->Path."/".$this->SelectLastLogFile(), "ab") )
                {
                    throw new Exception ( "Impossible d'ouvrir le fichier en écriture !" );
                }
                /* Ajout d'un verrou exclusif en ecriture/lecture */
                while ( false === (flock($handle, LOCK_SH+LOCK_EX)) )
                {
                    usleep (1);
                }
                /* écriture de la ligne, ou lancement d'une exception */
                if ( fwrite($handle, LogLine::__serialize( $Line )) === FALSE)
                {
                    throw new Exception ( "Impossible d'écrire dans le fichier !" );
                }
                /* Libération du verrou en lecture/écriture */
                flock($handle, LOCK_UN);
                /* fermeture du pointeur sur le fichier */
                fclose($handle);
            }
    Si vous avez la moindre solution n'hésitez surtout pas car la je n'en vois pas à part passer par un sgbd...

    Merci,

    bye

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut, d'apres les commentaires qu il y a dans la doc, certains utilisent clearstatecache, peut etre est ce du a un probleme de cache ?

    je ne peut malheureusement pas t en dire plus, n'utilisant pas cette fonction.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    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
    Hmm , peut être !

    Je vais essayer de le mettre un peu partout.

    Merci en tout cas

  4. #4
    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
    J'ai rajouté les clearstatcache et msi un usleep un peu plus long et j'obtiens un peu moins de ratage, mais bon...
    Sa ne me satisfait toujours pas
    Peut être que j'en demande trop :/

Discussions similaires

  1. [SP-2010] Avez-vous deja essayé les lookup en cascade ?
    Par eristoff53 dans le forum Développement Sharepoint
    Réponses: 28
    Dernier message: 21/10/2011, 10h06
  2. Avez-vous deja essaye un proxy qui marche sous cURL ?
    Par pdtor dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/12/2009, 18h27
  3. Réponses: 4
    Dernier message: 12/02/2008, 15h02
  4. Avez-vous déjà rencontré des "info bugs" ?
    Par Popof dans le forum WinDev
    Réponses: 14
    Dernier message: 27/09/2006, 10h20
  5. Avez vous deja vu ...
    Par Treuze dans le forum C++
    Réponses: 7
    Dernier message: 11/04/2006, 23h19

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