Peut-on/Comment supprimer la mise à jour du champ "params" de la table "#__users" ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Peut-on/Comment supprimer la mise à jour du champ "params" de la table "#__users" ?

    Bonjour à tous.

    J'ai récemment constaté un ralentissement de mon site lors de la modification des profils de membres.
    Comme je suis joueur, j'ai testé des enregistrements consécutifs multiples (sans modif du profil, juste en cliquant sur le bouton enregistrer), et le site ralentit, ralentit, jusqu'à planter complètement au bout d'un moment :

    Code HTML:
    Fatal error: Out of memory (allocated 122945536) (tried to allocate 16767648 bytes) in ...
    Après investigation, le problème viendrait du champ "params" de ma table "#__users", qui devient ajoute des "\\\\\" à chaque enregistrement.

    Donc, au départ, il contient :
    Code HTML:
    {"admin_style":"","admin_language":"","language":"","editor":"","helpsite":"","timezone":""}
    Puis, très vite :
    Code HTML:
    {"0":"{\"0\":\"{\\\"0\\\":\\\"{\\\\\\\"0\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"0\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"0...
    (plus de 4 millions de caractères !)

    Ce qui explique qu'au niveau de la mémoire, ça ne suive plus.

    Ma question est donc la suivante : vu que je n'utilise pas ce champ "params", est-ce que je peux le "désactiver" une fois que le profil du membre est créé ? (il n'a aucune raison d'être modifié, donc je ne voudrais pas le mettre à jour à chaque modification de profil).

    Merci d'avance pour votre aide.

    plastic1st

  • #2
    Re : Peut-on/Comment supprimer la mise à jour du champ "params" de la table "#__users

    Bonjour,

    L'accès aux paramètres de profil est géré au niveau de la configuration, menu User où vous pouvez masquer les paramètres de profil, ainsi que la langue.

    Par contre, j'ai essayé de reproduire le comportement que vous décrivez et, là, je ne vois pas....D'ailleurs, j'ai essayé d'utiliser le paramètre des versions, sans succès, mais, c'est une autre histoire....

    Quelle version Joomla utilisez-vous ? avez-vous un module/plugin/extension particulière pour gérer ça ?

    Pascal
    Dernière édition par pmleconte à 07/04/2016, 17h11
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Re : Peut-on/Comment supprimer la mise à jour du champ "params" de la table "#__users

      Bonjour Pascal.

      Merci pour votre réponse.
      Mes paramètres (langue, éditeur, timezone) sont bien masqués sur mon site.
      Je n'ai pas précisé (parce que j'ai localisé l'erreur dans /libraries/joomla/user/user.php) que j'utilise Community Builder pour gérer mes profils.
      Le problème apparaissant dans la fonction save() de Joomla, plus particulièrement à la ligne 791 :
      Code HTML:
       $result = $table->store();
      , j'ai pensé à un problème lié à Joomla, mais peut-être que c'est du côté de CB que les paramètres sont "surcharchés"...

      J'utilise Joomla 3.5.0 (et accessoirement CB 2.0.14.)

      Commentaire


      • #4
        Re : Peut-on/Comment supprimer la mise à jour du champ "params" de la table "#__users

        Bon, j'ai résolu mon problème tout seul comme un grand.
        Je poste la solution pour toi qui passe par là, et qui rencontre le même problème

        Dans un module personnalisé, j'ai ajouté le code JS suivant :
        Code HTML:
        <script type="text/javascript">
        	if(document.referrer.indexOf("cb-profile-edit/userdetails")>0)
        	{
        		saveUserParams();
        	}
            function saveUserParams()
            { 
                $.post("../includes/saveUserParams.php",
                {
                  id: <?php echo $user->id; ?>
                },
                function(data){
        			jQuery(document).ready(function() {
        				// Optionnel (moi je profite de ma fonction pour récupérer des infos,
        				// et je mets à jour les données à la volée sans recharger ma page)
        			});		
                });        
            }
        </script>
        Et dans mon fichier saveUserParams.php :

        Code HTML:
        <?php
        	define( '_JEXEC', 			1 );
        	chdir("../");
        	getcwd();
        	define('JPATH_BASE', getcwd() );
        	define('_USERS_DEFAULT_PARAMS', '{"admin_style":"","admin_language":"","language":"","editor":"","helpsite":"","timezone":""}' );
        
        	define( 'DS', DIRECTORY_SEPARATOR );
        
        	require_once (JPATH_BASE .DS.'includes'.DS.'defines.php' );
        	require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
        
        	global $mainframe;
        		
        	$mainframe =& JFactory::getApplication('site');
        	$mainframe->initialise();
        
        	$db = JFactory::getDBO();
        	
        	$query = $db->getQuery(true);
        
        	$fields = array(
        		$db->quoteName('params') . '=' . $db->quote(_USERS_DEFAULT_PARAMS)
        		);
        	 
        	$conditions = array(
        		$db->quoteName('id') . '=' . $_POST['id']
        	);
        	 
        	$query->update($db->quoteName('#__users'))->set($fields)->where($conditions);
        	$db->setQuery($query);
        	$result = $db->query();	
        ?>
        Et voilà, plus de ralentissement

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X