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 :

serialize() et perte de données (poids maximal?)


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : juin 2005
    Messages : 438
    Points : 250
    Points
    250
    Par défaut serialize() et perte de données (poids maximal?)
    Bonjour,

    Dans un système de gestion des cartes de temps, je crée un objet assez lourd de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(isset($_SESSION["cartes"])) $cartes = unserialize($_SESSION["cartes"]);
    else $cartes = new Cartes();
    L'objet Cartes contient plus de 6000 objets Carte qui contiennent tous environ une trentaine de données primitives, ce qui fait beaucoup d'information. À la fin de mon code, j'enregistre mon objet en session de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION["cartes"] = serialize($cartes);
    Toutes mes pages contiennent les deux sections de code citées plus haut. Mais lorsque je rafraichit une page, mon objet passe brusquement de 6000 et quelques éléments à 8. Je ne suis pas surpris que ça ne fonctionne pas. Mais je tiens à savoir si c'est pour ce que je crois, c'est à dire que serialize ne pourrait pas traiter autant d'information ou qu'une variable de session ne pourrait pas être aussi volumineuse. Comment remédier à ça?
    Pensez à la balise

  2. #2
    Membre éclairé
    Avatar de efficks
    Inscrit en
    septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Je ne sais pas la taille maximale d'une session mais une chose est sûre c'est une très mauvaise idée de mettre toutes ces informations là dans une session!!! Surtout sur une session existe par utilisateur et que tu as plusieurs utilisateurs imagine la redondance de donnée!!!!

    Utilises une base de données et des requêtes beaucoup plus performant, pratique et maintenable!
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  3. #3
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 246
    Points
    1 246
    Par défaut
    Ouais, mais ca dépend : le serialize() permet de passer un Objet "actif" d'une page à l'autre par des valeurs GET, POST ou bien SESSION, sans détruire l'objet, et donc son contexte d'utilisation.....

    Pour les variables de SESSION, je suppose que tu es limités par le cache du Serveur. As tu une idée du poid de tes Objets ?

    Passer tes objets en GET, je pense pas que ca passera.... Peut être en POST ?

    Ou alors, autre solution effectivement : tu dirige le path de sauvegarde des SESSION sur une BDD, ce qui te permet de libérer de la ressource.... Mais je crois que ce n'est valable que pour une "fin de session".....

    Pour plus d'info, le serialize() transforme tout ton objet en chaine de caractères. Donc effectivement, ce n'est pas très bon !!! Tu peux peut_être diminuer la taille de ton objet avec les méthodes __sleep() et __wakeup(), pour libérer un peu tes objets....

    Pour plus d'info sur les session :
    http://fr3.php.net/manual/fr/ref.session.php

    Mais je ne pense pas que ca t'apprendra grand chose de plus....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  4. #4
    Membre éclairé
    Avatar de efficks
    Inscrit en
    septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Non... pas seulement mettre la session dans la base de données. Mettre les données dans la base de données.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  5. #5
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : juin 2005
    Messages : 438
    Points : 250
    Points
    250
    Par défaut
    D'accord,

    ça me force a reculer un peu dans ce cas. Je croyais pouvoir réussir a stoquer mes données pas trop loin pour pouvoir obtenir un gain de performance par rapport aux éternelles requêtes dans la base de données. Alors je crois que je vais simplifier un peu le tout et stoquer moins d'informations en mémoire. Ce que je comprends plus ou moins c'est que ça marchait a merveille jusqu'à tout dernièrement alors que j'ai migré de Fedore Core 4 a Fedora Core 6. Normalement, ça devrait améliorer les choses et ne pas les déteriorer. Je me suis assuré de d'allouer suffisament de ressources dans php.ini .
    Pensez à la balise

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 246
    Points
    1 246
    Par défaut
    Ca marchait avant ?

    Tu as changé de core PHP entre temps (entre le fedora 4 et 6) ?

    Tu devrais peut être jeter un oeil plus profondément dans le php.ini, par aquis de conscience....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

Discussions similaires

  1. [MFC] CSocket | perte de données
    Par Grey dans le forum MFC
    Réponses: 2
    Dernier message: 24/11/2005, 11h14
  2. Perte de donnée
    Par spikto dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2005, 17h03
  3. Perte de données Firebird
    Par jeanafond dans le forum Débuter
    Réponses: 8
    Dernier message: 19/05/2005, 11h21
  4. Crash InnoDB,perte de données définitives... Info ou Intox ?
    Par Alexandre T dans le forum Administration
    Réponses: 3
    Dernier message: 17/01/2005, 11h44
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 01h37

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