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 :

[POO] Appel des destructeurs


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Points : 113
    Points
    113
    Par défaut [POO] Appel des destructeurs
    Bonjour,

    Dans mes pages php, un objet créé un fichier unique, et dans son destructeur, le détruit.

    Ca tourne plutôt bien, après une journée entière, aucun fichier qui traine, ça crée et ça en supprime en permanence.

    A ma grande surprise, je constate après 1 petite semaine de mise en prod, que j'ai environ 300 fichiers qui trainent !
    (certains vieux de plusieurs jours)

    Comment est-ce possible ? Il n'y a eu aucun problème apache ou système recensé.

    Est-ce que ça aurait un rapport avec un timeout de page ? Genre le serveur de bdd a ramé, le script a dépassé X secondes - la page est annulée pas proprement ? - ou qqun s'est connecté depuis le fin fond de la siberie avec une connexion 1 octet / s, qui aurait aussi déclenchée une sorte de time out ?
    Question subsidiaire : Que se passe t il si un socket était ouvert par la page ? (via fsockopen) - est ce qu'il traine à l'infini ?

    - dans quels cas ça peut arriver ?
    - que faire pour empêcher ce problème ?

    Merci, car là, je ne m'explique pas du tout le phénomène
    Chasseur de bug en activité
    L'erreur est humaine, mais pour vraiment foutre le bordel, on a besoin d'un ordinateur

  2. #2
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Points : 151
    Points
    151
    Par défaut
    Très bizarre c'est vrai ! A ma connaissance le destructeur de chaque objet est appelé en fin de script. Pour être sûr fait des appel explicite à chaque fin de page.
    Pour ce qui est du socket, je pense que tant qu'il n'est pas fermé il traine ( en tout cas en java sa marche comme sa ). Pour éviter le problème :

    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
     
    <?php
    // ouverture du socket
    $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET / HTTP/1.1\r\n";
        $out .= "Host: www.example.com\r\n";
        $out .= "Connection: Close\r\n\r\n";
     
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        // fermeture du socket à la fin du traitement
        fclose($fp);
    }
    ?>
    Infos : La socket sera ouverte par défaut en mode bloquant. Tu peux changer de mode en utilisant : stream_set_blocking().

    Voila tout ce que je peut te dire sur ton problème. J'espére que sa t'aide

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    Les ressources (ce qui est ouvert via fsockpoen) et les objets sont normalement tous détruit en fin de script.

    Maintenant, soit, ton script provoque une erreur et n'efface pas le ficheir, dans ce cas là c'est assez simple, active les erreurs, et log tout cela dans un fichier ou le syslog. Tu trouveras assez vite la source du problème pour le corriger.

    Ou alors, le GC, ne fait pas correctement sont travail, moi je pense que c'est possible. Même si PHP est bien développé, ils ne sont pas à l'abri d'un bug. Dans ce cas là, il n'y à pas trente six solutions que de mettre en place une routine supplémentaire pour néttoyer le dossier régulèrement.

    Bye

Discussions similaires

  1. [POO] Appel destructeur
    Par Oprichnik dans le forum Langage
    Réponses: 7
    Dernier message: 23/07/2009, 13h16
  2. [POO] Fonctionnement des destructeurs
    Par kuja2053 dans le forum Langage
    Réponses: 10
    Dernier message: 12/03/2008, 16h39
  3. [POO] Appels statiques sur des classes
    Par daajack dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2007, 15h47
  4. [POO] Appels Dynamiques à des classes
    Par Korko Fain dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 09h26

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