osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

2 Pages V   1 2 >  
Reply to this topicStart new topic
> OSC2.3 rame et plante mon serveur, Too many connections (my sql)
frogger74
posté 21 Feb 2012, 23:02
Message #1


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Bonjour,



Je possède une boutique OSC 2.2, j'ai décidé de passer à la version 2.1.3, j'ai donc transféré le contenue de mon catalogue et compte client vers cette nouvelle version, j'ai en plus installé SPPC, QTPRO et ECOTAXE.

Mon OSC 2.3 fonctionne bien, sauf que cette version de OSC est très lente, même dans sa version de base, surtout le backoffice, celui ci est 10 fois plus lent que la version 2.2… je sais que je possède pas mal de produits (1500) mais quand même.

Au point de faire planter le serveur SQL, je suis sur un serveur dédié (1 giga de RAM), j'ai décidé il y à quelques jours de mettre en ligne le site, 4 heures après le serveur était saturé :

Code
Erreur Too many connections

Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/monsite.com/public_html/boutique/includes/functions/database.php on line 20

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/monsite.com/public_html/boutique/includes/functions/database.php on line 24

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/monsite.com/public_html/boutique/includes/functions/database.php on line 25

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/monsite.com/public_html/boutique/includes/functions/database.php on line 26

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/monsite.com/public_html/boutique/includes/functions/database.php on line 27
Unable to connect to database server!


J'ai donc demandé à mon héberger, celui ci me dit en gros m'indique que c'est le site osc 2.1.3 qui bug, une application php qui tourne en boucle, en me disant également que OSC, ce n'était pas viable….. bref je ne veux pas rentrer dans cette polémique, je cherche juste à comprendre ce qui cloche avec les fonction SQL, je pense que trop de connexion SQL sont ouverte …..

Voici le code de ma page function/database.php

Code
<?php
/*
   $Id$
   adapted for Separate Pricing Per Customer 2005/03/04

   osCommerce, Open Source E-Commerce Solutions
   http://www.oscommerce.com

   Copyright (c) 2007 osCommerce

   Released under the GNU General Public License
*/

   function tep_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
     global $link;

     if (USE_PCONNECT == 'true') {
       $link = mysql_pconnect($server, $username, $password);
     } else {
       $link = mysql_connect($server, $username, $password);
     }
     if ($link) mysql_select_db($database);
// Modification pour ecriture de la base SGL en CHARSET UTF-8
mysql_query("SET CHARACTER SET 'utf8'", $link);
mysql_query("SET NAMES utf8", $link);
mysql_query("SET CHARACTER_SET_CLIENT=utf8", $link);
mysql_query("SET CHARACTER_SET_RESULTS=utf8", $link);
// Modification pour ecriture de la base SGL en CHARSET UTF-8

     return $link;
   }

   function tep_db_close($link = 'db_link') {
     global $link;

     return mysql_close($link);
   }

   function tep_db_error($query, $errno, $error) {
     die('<font color="#000000"><strong>' . $errno . ' - ' . $error . '<br /><br />' . $query . '<br /><br /><small><font color="#ff0000">[TEP STOP]</font></small><br /><br /></strong></font>');
   }

   function tep_db_query($query, $link = 'db_link') {
     global $link;

     if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
       error_log('QUERY ' . $query . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
     }

     $result = mysql_query($query, $link) or tep_db_error($query, mysql_errno(), mysql_error());

     if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
        $result_error = mysql_error();
        error_log('RESULT ' . $result . ' ' . $result_error . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
     }

     return $result;
   }

   function tep_db_perform($table, $data, $action = 'insert', $parameters = '', $link = 'db_link') {
     reset($data);
     if ($action == 'insert') {
       $query = 'insert into ' . $table . ' (';
       while (list($columns, ) = each($data)) {
         $query .= $columns . ', ';
       }
       $query = mb_substr($query, 0, -2) . ') values (';
       reset($data);
       while (list(, $value) = each($data)) {
         switch ((string)$value) {
           case 'now()':
             $query .= 'now(), ';
             break;
           case 'null':
             $query .= 'null, ';
             break;
           default:
             $query .= '\'' . tep_db_input($value) . '\', ';
             break;
         }
       }
       $query = mb_substr($query, 0, -2) . ')';
     } elseif ($action == 'update') {
       $query = 'update ' . $table . ' set ';
       while (list($columns, $value) = each($data)) {
         switch ((string)$value) {
           case 'now()':
             $query .= $columns . ' = now(), ';
             break;
           case 'null':
             $query .= $columns .= ' = null, ';
             break;
           default:
             $query .= $columns . ' = \'' . tep_db_input($value) . '\', ';
             break;
         }
       }
       $query = mb_substr($query, 0, -2) . ' where ' . $parameters;
     }

     return tep_db_query($query, $link);
   }

   function tep_db_fetch_array($db_query) {
     return mysql_fetch_array($db_query, MYSQL_ASSOC);
   }

   function tep_db_num_rows($db_query) {
     return mysql_num_rows($db_query);
   }

   function tep_db_data_seek($db_query, $row_number) {
     return mysql_data_seek($db_query, $row_number);
   }

   function tep_db_insert_id($link = 'db_link') {
     global $link;

     return mysql_insert_id($link);
   }

   function tep_db_free_result($db_query) {
     return mysql_free_result($db_query);
   }

   function tep_db_fetch_fields($db_query) {
     return mysql_fetch_field($db_query);
   }

   function tep_db_output($string) {
     return htmlspecialchars($string);
   }

   function tep_db_input($string, $link = 'db_link') {
     global $link;

     if (function_exists('mysql_real_escape_string')) {
       return mysql_real_escape_string($string, $link);
     } elseif (function_exists('mysql_escape_string')) {
       return mysql_escape_string($string);
     }

     return addslashes($string);
   }

   function tep_db_prepare_input($string) {
     if (is_string($string)) {
       return trim(tep_sanitize_string(stripslashes($string)));
     } elseif (is_array($string)) {
       reset($string);
       while (list($key, $value) = each($string)) {
         $string[$key] = tep_db_prepare_input($value);
       }
       return $string;
     } else {
       return $string;
     }
   }
// BOF Separate Pricing Per Customer, adapted from sample code in user comments on
   // http://www.php.net/manual/en/function.mysql-list-tables.php
   // Wrap DB_DATABASE with Back Ticks, Fixes Hyphens in Database Name, code from
   // Jef Stumpf/Krumbsnatcher: http://forums.oscommerce.com/index.php?showtopic=53436&view=findpost&p=563454
   function tep_db_table_exists($table, $link = 'db_link') {
       $result = tep_db_query("show table status from `" . DB_DATABASE . "`");
       while ($list_tables = tep_db_fetch_array($result)) {
         if ($list_tables['Name'] == $table) {
             return true;
         }
       }
       return false;
   }

   function tep_db_check_age_specials_retail_table() {
       $result = tep_db_query("show table status from `" . DB_DATABASE . "`");
       $last_update_table_specials = "2000-01-01 12:00:00";
       $table_srp_exists = false;
       while ($list_tables = tep_db_fetch_array($result)) {
       if ($list_tables['Name'] == TABLE_SPECIALS_RETAIL_PRICES) {
         $table_srp_exists = true;
         $last_update_table_srp = $list_tables['Update_time'];
       }
         if ($list_tables['Name'] == TABLE_SPECIALS) {
         $last_update_table_specials = $list_tables['Update_time'];
         }
       } // end while

       if(!$table_srp_exists || ($last_update_table_specials > $last_update_table_srp)) {
          if ($table_srp_exists) {
              $query1 = "truncate " . TABLE_SPECIALS_RETAIL_PRICES . "";
              if (tep_db_query($query1)) {
                      $query2 = "insert into " . TABLE_SPECIALS_RETAIL_PRICES . " select s.products_id, s.specials_new_products_price, s.status, s.customers_group_id from " . TABLE_SPECIALS . " s where s.customers_group_id = '0'";
                      $result =  tep_db_query($query2);
                  }
          } else { // table specials_retail_prices does not exist
              $query1 = "create table " . TABLE_SPECIALS_RETAIL_PRICES . " (products_id int NOT NULL default '0', specials_new_products_price decimal(15,4) NOT NULL default '0.0000', status tinyint, customers_group_id smallint, primary key (products_id) )";
              $query2 = "insert into " . TABLE_SPECIALS_RETAIL_PRICES . " select s.products_id, s.specials_new_products_price, s.status, s.customers_group_id from " . TABLE_SPECIALS . " s where s.customers_group_id = '0'";
              if( tep_db_query($query1) && tep_db_query($query2) ) {
                   ; // execution succesfull
                  }
                 } // end else
             } // end if(!$table_srp_exists || ($last_update_table_specials....
         }

   function tep_db_check_age_products_group_prices_cg_table($customer_group_id) {
       $result = tep_db_query("show table status from `" . DB_DATABASE . "`");
       $last_update_table_pgp = strtotime('2000-01-01 12:00:00');
       $table_pgp_exists = false;
       while ($list_tables = tep_db_fetch_array($result)) {
             if ($list_tables['Name'] == TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id) {
                 $table_pgp_exists = true;
                 $last_update_table_pgp = strtotime($list_tables['Update_time']);
             } elseif ($list_tables['Name'] == TABLE_SPECIALS ) {
                 $last_update_table_specials = strtotime($list_tables['Update_time']);
             } elseif ($list_tables['Name'] == TABLE_PRODUCTS ) {
                 $last_update_table_products = strtotime($list_tables['Update_time']);
             } elseif ($list_tables['Name'] == TABLE_PRODUCTS_GROUPS ) {
                 $last_update_table_products_groups = strtotime($list_tables['Update_time']);
             }
       } // end while

     if ($table_pgp_exists == false) {
       $create_table_sql = "create table " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id . " (products_id int NOT NULL default '0', products_price decimal(15,4) NOT NULL default '0.0000', specials_new_products_price decimal(15,4) default NULL, status tinyint, primary key (products_id) )";
       $fill_table_sql1 = "insert into " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." select p.products_id, p.products_price, NULL as specials_new_products_price, NULL as status FROM " . TABLE_PRODUCTS . " p";
       $update_table_sql1 = "update " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." ppt left join " . TABLE_PRODUCTS_GROUPS . " pg using(products_id) set ppt.products_price = pg.customers_group_price where ppt.products_id = pg.products_id and pg.customers_group_id ='" . $customer_group_id . "'";
       $update_table_sql2 = "update " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." ppt left join " . TABLE_SPECIALS . " s using(products_id) set ppt.specials_new_products_price = s.specials_new_products_price, ppt.status = s.status where ppt.products_id = s.products_id and s.customers_group_id = '" . $customer_group_id . "'";
             if ( tep_db_query($create_table_sql) && tep_db_query($fill_table_sql1) && tep_db_query($update_table_sql1) && tep_db_query($update_table_sql2) ) {
                      return true;
             }
         } // end if ($table_pgp_exists == false)
    
         if ( ($last_update_table_pgp < $last_update_table_products && (time() - $last_update_table_products > (int)MAXIMUM_DELAY_UPDATE_PG_PRICES_TABLE * 60) ) || $last_update_table_specials > $last_update_table_pgp || $last_update_table_products_groups > $last_update_table_pgp ) { // then the table should be updated
       $empty_query = "truncate " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id . "";
       $fill_table_sql1 = "insert into " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." select p.products_id, p.products_price, NULL as specials_new_products_price, NULL as status FROM " . TABLE_PRODUCTS . " p";
       $update_table_sql1 = "update " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." ppt left join " . TABLE_PRODUCTS_GROUPS . " pg using(products_id) set ppt.products_price = pg.customers_group_price where ppt.products_id = pg.products_id and pg.customers_group_id ='" . $customer_group_id . "'";
       $update_table_sql2 = "update " . TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id ." ppt left join " . TABLE_SPECIALS . " s using(products_id) set ppt.specials_new_products_price = s.specials_new_products_price, ppt.status = s.status where ppt.products_id = s.products_id and s.customers_group_id = '" . $customer_group_id . "'";
       if ( tep_db_query($empty_query) && tep_db_query($fill_table_sql1) && tep_db_query($update_table_sql1) && tep_db_query($update_table_sql2) ) {
           return true;
       }
         } else { // no need to update
              return true;
         } // end checking for update

   }

// EOF Separate Pricing Per Customer
?>



Peut être que SPPC etc pourrait être mieux adapté au autres contribution, du moin dans sa gestion de mysql... non? n'étant pas un grand expert en mysql , je patauge.. unsure.gif

Mais cela n'explique pas quel en serait la cause… d'autant que j'avais essayé de récupérer un peu de vitesse en supprimant des functions, mais çà n'y change rien, le problème doit être identique pour le backoffice , voir même pire , car il faut attendre presque 20 secondes à chaque action clique. (c'est sur que c'est plus rapide si je n'est qu'une centaine de produits.)

Peut être aussi le serveur dédié qui commence à saturer (1 Giga de ram), voir aussi le module MySQL du serveur (max_connections) qui pourrait être paramétré à la hausse… mais je pense qu'une optimisation du code de L'osc 2.3 serait plus intéressant.

ensuite en cherchant un peu j'ai trouvé ceci dans configure.php, y'a t'il un rapport ?
Code
define('USE_PCONNECT', 'false');
define('STORE_SESSIONS', 'mysql');


Donc, je pense changer d'hébergeur, pour passer sur un serveur dédié plus performant et infogéré par une équipe à l'écoute, car l'hébergeur actuel, n'a que faire de mes problèmes… ainsi un diagnostique pourrait être entrepris…

Bref, si vous avez une idée sur ce problème, je suis preneur… car je suis très déçu par la version OSC2.3 et je ne sais pas ou chercher, je commence à regretter son installation. confused.gif ??:

Merci pour votre aide cool.gif

Ce message a été modifié par frogger74 - 23 Feb 2012, 09:12.
Go to the top of the page
 
krokus
posté 25 Feb 2012, 10:31
Message #2


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 337
Inscrit : 23-February 07
Membre no 15518



Bonjour, etant sur un mutualise avec + de 2000 produits et osc 2.3, je peus te dire que ce n'est pas la 2.3 qui est en cause mais certainement un addon mal installe ou non prevue pour la 2.3.
Maintenant je ne suis pas un as, mais plus d'info sur ta config serveur serait interessant.


--------------------
Ms2.3+Category Description+Ckeditor+Colissimo+EasyPopulate+Header tags seo+Otf autothumb+PIM osSlideshow+Theme switcher+Ultimate Seo Urls+Icone stock+crawlprotect+Who's Online Enhancement+Master password+lien suivi colis
Go to the top of the page
 
frogger74
posté 26 Feb 2012, 14:15
Message #3


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Citation (krokus @ 25 Feb 2012, 10:31) *
Bonjour, etant sur un mutualise avec + de 2000 produits et osc 2.3, je peus te dire que ce n'est pas la 2.3 qui est en cause mais certainement un addon mal installe ou non prevue pour la 2.3.
Maintenant je ne suis pas un as, mais plus d'info sur ta config serveur serait interessant.


Salut

En fait c'est un serveur dédié équipé de 1Go de RAM, mon hebergeur m'indique qu'il s'agirait d'un "script php qui s'embalerais et créerait une boucle infinie."

Mais franchement , je ne vois pas le script en question, ce serais un script qui utilise aussi les ressource mysql, j'ai dessus:

-SEO ultimate URL
-SPPC
-Ecotaxe
-qtpro
- et d'autre petite contribution...

Ce qui me choc, depuis mon passage en 2.3, c'est la lenteur du backoffice angry.gif

Ce message a été modifié par frogger74 - 26 Feb 2012, 14:48.
Go to the top of the page
 
Gnidhal
posté 26 Feb 2012, 15:10
Message #4


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Bonjour,
déjà évoqué ailleurs, tu as à ta disposition des outils de débug intégrés concernant les lenteurs des requêtes et les moyens de localiser un problème
dans l'admin le module de traçage est assez efficace et voir le moyen de lui donner plus de précision dans le résultat ici : http://www.oscommerce-fr.info/forum/index....st&p=360916


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
frogger74
posté 26 Feb 2012, 23:27
Message #5


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Merci Gnidhal,


Tu me met sur la voix, j'ai mis en place le traçage, le fichier log explose , il est déjà à 60 mo en 10 minutes.

Par contre je n'est pas eu besoin d'ajouter ta fonction dans database.php.

Mais je suis une buse en SQL, si je regarde les log, je ne vois rien de spécial, comment savoir que tel ou tel requête consomme trop de temps d'exécution ?

comme ici:

Code
26/02/2012 22:55:02 [QUERY] SELECT products_stock_attributes
                                             FROM products_stock
                                             WHERE products_id = '4030'
26/02/2012 22:55:02 [QUERY] select configuration_group_id as cgID, configuration_group_title as cgTitle from configuration_group where visible = '1' order by sort_order
26/02/2012 22:55:02 [QUERY] select pd.products_name, pd.products_description,pd.products_description2,pd.products_description3, pd.products_condi,pd.products_contenance, pd.products_dimension, pd.products_head_title_tag, pd.products_head_desc_tag, pd.products_head_keywords_tag, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_ref_const, p.products_avertissement, p.products_limite, p.products_on_order,  p.products_image, p.products_price,p.products_cost, p.products_weight, p.products_oversize, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, date_format(p.products_date_available_pc, '%Y-%m-%d') as products_date_available_pc, p.products_status,p.products_carrot, p.products_sc_status, p.products_tax_class_id, p.ecotax_rates_id,c.ecotax_class_id, p.manufacturers_id from ((products p, products_description pd) left join products_to_categories p2c on (p.products_id = p2c.products_id)) left join categories c on ( p2c.categories_id = c.categories_id ) where p.products_id = '3870' and p.products_id =
       pd.products_id and pd.language_id = '1'
26/02/2012 22:55:02 [QUERY] select id, image, htmlcontent, sort_order from products_images where products_id = '3870' order by sort_order
26/02/2012 22:55:02 [QUERY] select manufacturers_id, manufacturers_name from manufacturers order by manufacturers_name
26/02/2012 22:55:02 [QUERY] select tax_class_id, tax_class_title from tax_class order by tax_class_title
26/02/2012 22:55:02 [QUERY] select ecotax_rates_id, ecotax_price from ecotax order by ecotax_class_id
26/02/2012 22:55:02 [QUERY] select languages_id, name, code, image, directory from languages order by sort_order
26/02/2012 22:55:02 [QUERY] select sum(tax_rate) as tax_rate from tax_rates tr left join zones_to_geo_zones za on (tr.tax_zone_id = za.geo_zone_id) left join geo_zones tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id is null or za.zone_country_id = '0' or za.zone_country_id = '73') and (za.zone_id is null or za.zone_id = '0' or za.zone_id = '218') and tr.tax_class_id = '5' group by tr.tax_priority
26/02/2012 22:55:02 [QUERY] select sum(tax_rate) as tax_rate from tax_rates tr left join zones_to_geo_zones za on (tr.tax_zone_id = za.geo_zone_id) left join geo_zones tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id is null or za.zone_country_id = '0' or za.zone_country_id = '73') and (za.zone_id is null or za.zone_id = '0' or za.zone_id = '218') and tr.tax_class_id = '6' group by tr.tax_priority
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '35'
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '19'
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '20'
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '21'
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '22'
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '23'


Par exemple sur les dernières ligne dans l'exemple, j'ai 170 lignes de la requête suivante.

Code
26/02/2012 22:55:02 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '35'


D'ailleurs, j'ai fait mes tests sur le backoffice, apparemment le front office et backoffice sont lié, et le ralentissement et bien plus visible coté backoffice.... même si je ne sais toujours pas d’où viens le problème. wacko.gif

Ce message a été modifié par frogger74 - 26 Feb 2012, 23:41.
Go to the top of the page
 
FoxP2
posté 27 Feb 2012, 07:49
Message #6


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



Citation (frogger74 @ 21 Feb 2012, 23:02) *
Mon OSC 2.3 fonctionne bien, sauf que cette version de OSC est très lente, même dans sa version de base, surtout le backoffice, celui ci est 10 fois plus lent que la version 2.2… je sais que je possède pas mal de produits (1500) mais quand même.

10 fois plus lente, nan, la version 2.3.x est au moins 100 x + lente que la 2.2.x. Et tu as un dédié pour un fond de catalog de 1500 produits ? ...
bon, j'ai bien rit, je vais bosser ...
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 09:31
Message #7


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Citation (FoxP2 @ 27 Feb 2012, 07:49) *
10 fois plus lente, nan, la version 2.3.x est au moins 100 x + lente que la 2.2.x. Et tu as un dédié pour un fond de catalog de 1500 produits ? ...
bon, j'ai bien rit, je vais bosser ...
Dis pas ça, ça pourrait être pris au premier degré !
Je connais un site qui tourne sur un mutualisé avec plus de 6000 produits et 1500 visiteurs/jour : ça roule smile.gif

@frogger74 c'est bien tu vois maintenant où est le problème.
Mais cet outil de traçage n'est pas à utiliser en ligne car tu ne pourras rien en faire. En production tu ne pourras pas pister les problèmes car tu auras trop de lignes : chaque requête génère une ligne, si tu as 10 visiteurs en ligne tu ne pourras pas tracer quoi que ce soit. A moins d'adapter le code pour ne racer que ton ip, faisable mais pas foncièrement propre.

Tu dois donc travailler en local pour :
1 chercher une requête qui planterai car elle a une erreur invisible:
c'est le cas quand on cible une table sans y chercher une colonne =>
select a.champ1, b,champ2, b.champ3 from table1 as a, table2 as b, table3 as c where a.champ1 = 'valeur' ans b.champ3 = 'valeur';
ici on appelle la table 3 avec l'alias c mais on ne cherche rien dedans. Résultat on ouvre la table mais la requête scanne la table pour rien... ta requête mettra 1 seconde à donner un résultat.
2 modifier les requêtes redondantes pour les regrouper en 1 seule :
c'est le cas dans tes 170 lignes à répétitions et là il faut modifier le code =>
On a vraisemblablement un bout de code qui fonctionne comme ça :
Code
for ($i = 1; $i<= 100; $i++){
  $query = tep_de_query("select SUM(ecotax_price) as ecotax_price from ".TABLE_ECOTAX." where ecotax_rates_id = '$i' ");
  $result = tep_db_fetch_array($query);
}
mauvaise méthode on fait 100 requêtes pour une recherche
la bonne méthode est là :
Code
  $list = array();
  for ($i = 1; $i<= 100; $i++){
    $list[] = $i;
  }
  $liste = implode(',',$list);
  $liste = trim($liste,',');
  if (count($list) ){
    $query = tep_de_query("select SUM(ecotax_price) as ecotax_price from ".TABLE_ECOTAX." where ecotax_rates_id in ($liste) ");
    $result = tep_db_fetch_array($query);
  }

a/ on construit une liste
b/ on fait une requête qui cherche dans la liste.

Pas forcément facile à faire quand on débute en code car pour l'exemple j'ai simplifié avec une boucle for $i... mais la construction de la liste peut être plus complexe.

Accessoirement, j'ai donné dans le post référencé plus haut, un moyen de modifier le log pour qu'il piste l'exe à la milliseconde car si une requête met plus d'une seconde c'est qu'elle est dramatiquement lourde donc dans la même seconde tu ne peux vois si une requête traîne vraiment quand l'affichage se limite au temps en secondes.

En tous cas, tu tiens un coupable : la contribution ecotax qui doit être développée avec une petite cuillère. On ne peut pas vraiment en vouloir à l'auteur, l'exotaxe est une chienlit. Mais il faudra faire un effort de ce coté pour l'optimiser ou te demander si elle est vraiment indispensable.
C'est vrai, l'exotaxe n'est pas forcément impérative pour les commerces en ligne, tu pourrais te contenter de placer une valeur fixe dans chaque champ produit et afficher la valeur de l'ecotaxe dans chaque fiche produit, rien d'autre.
Après comptablement c'est à toi de faire ressortir le montant global dans ta compta. Mais est-ce obligatoire sur la facture ?
Il me semble que l'ecotaxe est collectée à la source chez le fabricant. Elle n'a donc aucune incidence sur le prix de vente public d'un produit (elle est intégrée de fait) et n'est pas récupérable par les professionnels comme la TVA. Son affichage est donc informatif uniquement.
Sur ce sujet, ce que j'en dis est un point de vue, pas une valeur sure hein ?


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
frogger74
posté 27 Feb 2012, 11:56
Message #8


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Citation (Gnidhal @ 27 Feb 2012, 09:31) *
Citation (FoxP2 @ 27 Feb 2012, 07:49) *
10 fois plus lente, nan, la version 2.3.x est au moins 100 x + lente que la 2.2.x. Et tu as un dédié pour un fond de catalog de 1500 produits ? ...
bon, j'ai bien rit, je vais bosser ...
Dis pas ça, ça pourrait être pris au premier degré !
Je connais un site qui tourne sur un mutualisé avec plus de 6000 produits et 1500 visiteurs/jour : ça roule smile.gif

@frogger74 c'est bien tu vois maintenant où est le problème.
Mais cet outil de traçage n'est pas à utiliser en ligne car tu ne pourras rien en faire. En production tu ne pourras pas pister les problèmes car tu auras trop de lignes : chaque requête génère une ligne, si tu as 10 visiteurs en ligne tu ne pourras pas tracer quoi que ce soit. A moins d'adapter le code pour ne racer que ton ip, faisable mais pas foncièrement propre.

Tu dois donc travailler en local pour :
1 chercher une requête qui planterai car elle a une erreur invisible:




Salut et encore merci Gnidhal !



Pour t'avouer les choses, je suis un peu fébrile sur ce coup, cela va faire 8 mois que je bosse comme un fou, la semaine dernière je décide donc de lancer la boutique, au bout de 4 heures, le serveur dédié était planté (too many SQL connexion) j'ai donc isolé le site, il est donc toujours accessible mais, seulement de moi, donc de ce coté la, je préfère rester et travailler en ligne... ce sera plus simple pour moi.

Pour l'ecotaxe, je suis à 300 % d'accord avec toi, c'est une grosse chianli, ont m'a demandé de l'installer car il était impératif de la voir s'afficher sur la facture (excès de zèle du comptable blink.gif ???), j'ai eu des tonnes de difficultées à la faire cohabiter avec sspc, car en plus, tu as la TVA sur l'ecotaxe, donc tu à l'écotaxe TTC et HT en fonction du customers group !! le plus incroyable , c'est que j'y suis arrivé, j'étaie tout fier biggrin.gif .... et voila que l'écotaxe me rappel à son bon souvenir, si possible j'aimerais autant résoudre la requête SQL , je vais déjà revoir tous ce qui comporte "ecotax", plus particulièrement les instructions sql, si je trouve le type de code que tu m'indique, j'essaierais ton correctif.... car il est vrai que j'ai du modifier les class / shopping_cart.php pour désolidariser le ECOTAX HT de l'ECOTAX TTC., ainsi forcer l'affichage HT et TTC en fonction du customer group, j'ai fait çà à la barbare car je suis pas vraiment un super pro... donc je sais pas si cela aurait pu jouer un rôle néfaste dans l'histoire.

par exemple dans shopping_cart.php, j'ai mis ce code (pour switcher en le HT et TTC):

Code
      if (MODULE_ORDER_TOTAL_ECOTAX_STATUS=='true'){
           $product_info_ecotax=tep_get_ecotax_description($products[$i]['ecotax_rates_id']);
           $ecotax_rates_id=($products[$i]['ecotax_rates_id']!=$product_info_ecotax[0]['ecotax_id_other']&&$product_info_ecotax[0]['ecotax_id_other']!=""&& $product_info_ecotax[0]['ecotax_id_other']!="0")?$product_info_ecotax[0]['ecotax_id_other']:$products[$i]['ecotax_rates_id'];
          }
    
    // Switch Prix HT & TTC dans le panier (TVA et ecotaxe TVA)
      if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
    $price_final_eco = $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']),tep_get_ecotax_rate($ecotax_rates_id),$products[$i]['quantity']);
    $price_TVA = ' HT';
    
    } else {
    
    $price_final_eco = $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']),$ecotax_rates_id,$products[$i]['quantity']);
    $price_TVA = '';
    }
    // Switch Prix HT & TTC dans le panier (TVA et ecotaxe TVA)



Ensuite dans product_info.php j'ai voulu afficher le prix en image, en remplacant les chifres composant chaque prix par une image... 1 = 1.png etc.... avec donc le prix remisé + sppc et donc ecotaxe en HT et TTC pour compliquer les choses wacko.gif , c'est l'usine à gaz mais comme je suis plutôt balo en php, j'ai opté pour ce qui fonctionne, donc le code suivant:


Code
    if ($new_price = tep_get_products_special_price($product_info['products_id'])) {
    // BOF Separate Pricing per Customer
          if ($customer_group_id != 0) { // only need to check products_groups if customer is not retail
            $scustomer_group_price_query = tep_db_query("select customers_group_price, customers_group_id from " . TABLE_PRODUCTS_GROUPS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id']. "' and customers_group_id =  '" . $customer_group_id . "'");
            if ($scustomer_group_price = tep_db_fetch_array($scustomer_group_price_query)) {
              $product_info['products_price']= $scustomer_group_price['customers_group_price'];
              $scustomer_group_id=$scustomer_group_price['customers_group_id'];
              }
          } // end if ($customer_group_id > 0)
    // EOF Separate Pricing per Customer
    
    // ecotaxe HT ou TTC 1
    if ($customer_group_id != 0) {    
    // Si pro calculer le PRIX avec l'ecotaxe HT
    $old_prix = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']),tep_get_ecotax_rate( $ecotax_rates_id));
    } else {
    // Sinon calculer le PRIX avec l'écotaxe TTC
    $old_prix = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']),$ecotax_rates_id);
    }
    // ecotaxe HT ou TTC 1
    $new_prix = $currencies->display_price($new_price, tep_get_tax_rate($product_info['products_tax_class_id']),$ecotax_rates_id);
    
    $products_price_seul =  $new_prix .' ' . '<del style="text-align:inherit; color: red;">' . $old_prix . '</del>';
    
    $news_prix_gfx = preg_replace("#([1-9,0-0.])#", '<img id="texte_box_prix" src="images/icons/prix/n$1.png" border="0">', $new_prix);
    $old_prix_gfx = preg_replace("#([1-9,0-0.])#", '<img id="texte_box_prix" src="images/icons/prix/p$1.png" border="0">', $old_prix);
        
        //debut modif by paddybl for ecotax
          $products_price = '<table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td valign="bottom">' . $news_prix_gfx .'</td>
        <td valign="bottom"><img src="images/icons/prix/euro.png" border="0"></td>
        <td valign="bottom" >' . '' . $old_prix_gfx . '' .'</td>
        <td valign="bottom"><img src="images/icons/prix/peuro.png" border="0">' . $products_tva_promo_gfx . '</td>
      </tr>
    </table>';
    
    $products_euro_sup = str_replace($global_euro,' ', $products_price);
    
    
        } else {
        // BOF Separate Pricing per Customer
          if ($customer_group_id > 0) { // only need to check products_groups if customer is not retail
            $scustomer_group_price_query = tep_db_query("select customers_group_price, customers_group_id from " . TABLE_PRODUCTS_GROUPS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id']. "' and customers_group_id =  '" . $customer_group_id . "'");
            if ($scustomer_group_price = tep_db_fetch_array($scustomer_group_price_query)) {
                $product_info['products_price']= $scustomer_group_price['customers_group_price'];
                $scustomer_group_id=$scustomer_group_price['customers_group_id'];
                }
            } // end if ($customer_group_id > 0)
        // EOF Separate Pricing per Customer
        
    // ecotaxe HT ou TTC 2
    if ($customer_group_id != 0) {    
    // Si pro calculer le PRIX avec l'ecotaxe HT
    $old_prix = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']),tep_get_ecotax_rate( $ecotax_rates_id));
    } else {
    // Sinon calculer le PRIX avec l'écotaxe TTC
    $old_prix = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']),$ecotax_rates_id);        
    }
    // ecotaxe HT ou TTC 2
    
            
    $old_prix_gfx = preg_replace("#([1-9,0-0.])#", '<img id="texte_box_prix" src="images/icons/prix/n$1.png" border="0">', $old_prix);
    
    $products_price = '<table border="0" width="1" cellspacing="0" cellpadding="0">
      <tr>
        <td valign="bottom" width="1">' . $old_prix_gfx .' </td>
        <td valign="bottom" width="1"><img src="images/icons/prix/euro.png" border="0">' . $products_tva_gfx . '</td>
      </tr>
    </table>';
      
    $products_price_seul =  $new_prix .' ' . $old_prix;
        
    $products_euro_sup = str_replace($global_euro,'', $products_price);
    
        }
         //fin modif by paddybl for ecotax


Je ne sais pas si j'ai bien fait? , c'est sans doute du travail de cochon unsure.gif en même temps je ne suis pas sûr que cela soit le problème soulevé... car il n'est pas questions de requêtes SQL.... en même temps tout est requête SQL , non ?


Bon, j'ai donc recherché les requete ecotaxe intégrant "SUM" comme mot clé, j'ai trouvé ceci:

Dans Admin/includes/function/general.php (ligne 1870):
Code
    $tax_query = tep_db_query("select sum(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za on (tr.tax_zone_id = za.geo_zone_id) left join " . TABLE_GEO_ZONES . " tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id is null or za.zone_country_id = '0' or za.zone_country_id = '" . (int)$country_id . "') and (za.zone_id is null or za.zone_id = '0' or za.zone_id = '" . (int)$zone_id . "') and tr.tax_class_id = '" . (int)$class_id . "' group by tr.tax_priority");
       // $tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " where tax_class_id = '" . (int)$class_id . "' group by tax_priority");


Ensuite plus haut dans Admin/includes/function/general.php: (ligne 483)

Code
// TABLES: ecotax, zones_to_geo_zones
  
    function tep_get_ecotax_price_value($class_id) {
      $ecotax_query = tep_db_query("select SUM(ecotax_price) as ecotax_price from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
      if (tep_db_num_rows($ecotax_query)) {
        $ecotax_multiplier = 0;
        while ($ecotax = tep_db_fetch_array($ecotax_query)) {
          $ecotax_multiplier += $ecotax['ecotax_price'];
        }
        return tep_round($ecotax_multiplier, 2);
      } else {
        return 0;
      }
    }
      function tep_get_ecotax_rate_value($class_id) {
      $ecotax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
      if (tep_db_num_rows($ecotax_query)) {
        $ecotax_multiplier = 0;
        while ($ecotax = tep_db_fetch_array($ecotax_query)) {
          $ecotax_multiplier += $ecotax['tax_rate'];
        }
        return $ecotax_multiplier;
      } else {
        return 0;
      }
    }
    //fin modif by paddybl for ecotax


A la ligne 542:

Code
    $ecotax_query = tep_db_query("select sum(tax_rate) as tax_rate from " . TABLE_ECOTAX_RATES . " tr  where tr.ecotax_rates_id = '" . (int)$rates_id . "' group by tr.ecotax_rates_id");


A la ligne 1827:

Code
  function tep_get_tax_rate($class_id, $country_id = -1, $zone_id = -1) {
      global $customer_zone_id, $customer_country_id;
  
      if ( ($country_id == -1) && ($zone_id == -1) ) {
        if (!tep_session_is_registered('customer_id')) {
          $country_id = STORE_COUNTRY;
          $zone_id = STORE_ZONE;
        } else {
          $country_id = $customer_country_id;
          $zone_id = $customer_zone_id;
        }
      }
  
      $tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za ON tr.tax_zone_id = za.geo_zone_id left join " . TABLE_GEO_ZONES . " tz ON tz.geo_zone_id = tr.tax_zone_id WHERE (za.zone_country_id IS NULL OR za.zone_country_id = '0' OR za.zone_country_id = '" . (int)$country_id . "') AND (za.zone_id IS NULL OR za.zone_id = '0' OR za.zone_id = '" . (int)$zone_id . "') AND tr.tax_class_id = '" . (int)$class_id . "' GROUP BY tr.tax_priority");
      if (tep_db_num_rows($tax_query)) {
        $tax_multiplier = 0;
        while ($tax = tep_db_fetch_array($tax_query)) {
          $tax_multiplier += $tax['tax_rate'];
        }
        return $tax_multiplier;
      } else {
        return 0;
      }
    }

Sans doute une mauvaise adaptation pour la OSC2.1.3, mais je ne vois pas, j'ai vérifié l'install... mellow.gif ...

Dans catalog/Advanced_search_result.php :

Code
  if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) {
        $select_str .= ", SUM(tr.tax_rate) as tax_rate ";
      }
    
            if ($status_tmp_product_prices_table == true) {
    $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . $product_prices_table . " as tmp_pp using(products_id)";
            } elseif ($status_tmp_special_prices_table == true) {
    $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS_RETAIL_PRICES . " s on p.products_id = s.products_id ";
            } else {
    $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) ";
            }
      // EOF Separate Pricing Per Customer
    
      if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) {
        if (!tep_session_is_registered('customer_country_id')) {
          $customer_country_id = STORE_COUNTRY;
          $customer_zone_id = STORE_ZONE;
        }
        $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')";
      }
    
      $from_str .= ", " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";
    
      // BOF Enable & Disable Categories
      // BOF CARROT
    $where_str = " where p.products_carrot = '0' and p.products_status = '1' and c.categories_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id ";
      // EOF Enable & Disable Categories
      // EOF Carrot


dans catalog/include/function/general.php:

Code
  function tep_get_ecotax_price_value($class_id) {
        $ecotax_query = tep_db_query("select SUM(ecotax_price) as ecotax_price from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
        if (tep_db_num_rows($ecotax_query)) {
          $ecotax_multiplier = 0;
          while ($ecotax = tep_db_fetch_array($ecotax_query)) {
            $ecotax_multiplier += $ecotax['ecotax_price'];
          }
          return tep_round($ecotax_multiplier, 2);
        } else {
          return 0;
        }
      }
      
      function tep_get_ecotax_rate($rates_id, $country_id = -1, $zone_id = -1) {
        global $customer_zone_id, $customer_country_id;
    
        if ( ($country_id == -1) && ($zone_id == -1) ) {
          if (!tep_session_is_registered('customer_id')) {
            $country_id = STORE_COUNTRY;
            $zone_id = STORE_ZONE;
          } else {
            $country_id = $customer_country_id;
            $zone_id = $customer_zone_id;
          }
        }
    
        $ecotax_query = tep_db_query("select sum(tax_rate) as tax_rate from " . TABLE_ECOTAX_RATES . " tr  where tr.ecotax_rates_id = '" . (int)$rates_id . "' group by tr.ecotax_rates_id");


Pour moi, le code le plus suspect, serait le premier code non ?, je vais revoir l'install d'ecotax pour voir si y'a modification de la contribution orginal.

Merci d’avoir pris le temps de me lire.

Ce message a été modifié par frogger74 - 27 Feb 2012, 14:40.
Go to the top of the page
 
frogger74
posté 27 Feb 2012, 15:05
Message #9


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Bon, pour ceux que çà intéresse, j'avance dans l'analyse que ma soumise Gnidhal,


Alors je confirme que les codes qui provoquent mes 170 lignse de log "ecotaxe" sont bien celle ci:


Code
//debut modif by paddybl for ecotax
////
// Returns the ecotax rate for a zone / class
// TABLES: ecotax, zones_to_geo_zones

   function tep_get_ecotax_price_value($class_id) {
     $ecotax_query = tep_db_query("select SUM(ecotax_price) as ecotax_price from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
     if (tep_db_num_rows($ecotax_query)) {
       $ecotax_multiplier = 0;
       while ($ecotax = tep_db_fetch_array($ecotax_query)) {
         $ecotax_multiplier += $ecotax['ecotax_price'];
       }
       return tep_round($ecotax_multiplier, 2);
     } else {
       return 0;
     }
   }
     function tep_get_ecotax_rate_value($class_id) {
     $ecotax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
     if (tep_db_num_rows($ecotax_query)) {
       $ecotax_multiplier = 0;
       while ($ecotax = tep_db_fetch_array($ecotax_query)) {
         $ecotax_multiplier += $ecotax['tax_rate'];
       }
       return $ecotax_multiplier;
     } else {
       return 0;
     }
   }
   //fin modif by paddybl for ecotax


A noter, que pour provoquer ces 170 ligne il suffit juste de cliquer sur "modifier" (un produit) dans le backoffice, je n'est pour le moment pas trouvé de similitude coté frontoffice... mais bon.

J'ai donc fait cette adaptation (avec le code fourni par le boss Gnidhal)

Code
function tep_get_ecotax_price_value($class_id) {
$list = array();
   for ($i = 1; $i<= 100; $i++){
     $list[] = $i;
   }
   $liste = implode(',',$list);
   $liste = trim($liste,',');

    // $ecotax_query = tep_db_query("select SUM(ecotax_price) as ecotax_price from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
     $ecotax_query = tep_db_query("select SUM(ecotax_price) as ecotax_price from ".TABLE_ECOTAX_RATES." where ecotax_rates_id in ($liste) ");

     if (tep_db_num_rows($ecotax_query)) {

       $ecotax_multiplier = 0;

       while ($ecotax = tep_db_fetch_array($ecotax_query)) {

         $ecotax_multiplier += $ecotax['ecotax_price'];

       }

       return tep_round($ecotax_multiplier, 2);

     } else {

       return 0;

     }

   }

     function tep_get_ecotax_rate_value($class_id) {
$list = array();
   for ($i = 1; $i<= 100; $i++){
     $list[] = $i;
   }
   $liste = implode(',',$list);
   $liste = trim($liste,',');

   //  $ecotax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_ECOTAX_RATES . " where ecotax_rates_id = '" . (int)$class_id . "'");
     $ecotax_query = tep_db_query("select SUM(tax_rate) as tax_rate from ".TABLE_ECOTAX_RATES." where ecotax_rates_id in ($liste) ");

     if (tep_db_num_rows($ecotax_query)) {

       $ecotax_multiplier = 0;

       while ($ecotax = tep_db_fetch_array($ecotax_query)) {

         $ecotax_multiplier += $ecotax['tax_rate'];

       }

       return $ecotax_multiplier;

     } else {

       return 0;

     }

   }

   //fin modif by paddybl for ecotax


Résultat:, je n'est plus ces 170 lignes , d'écritures biggrin.gif par contre çà ne va pas plus vites dans le traitement, même voir plus lentement... huh.gif , j'ai donc du me planter dans son adaptation avec "$i". unsure.gif

Ce message a été modifié par frogger74 - 27 Feb 2012, 15:13.
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 16:52
Message #10


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



houla! STOOOOP!

Mon exemple de boucle
for $i=0;$i<100;$i++
était là juste pour l'exemple! tu n'as pas de boucle de ce type dans ton code!
dans ton code tu as dans categories.php (puisque tu dis que ça se passe quand tu veux éditer un produit) une ligne qui appelle l'affichage de l'exotax via une fonction tep_get_ecotax_price_value ou tep_get_ecotax_rate_value... (comme tu l'as découvert)
et vraisemblablement elle est dans une boucle où elle est appelée 170 fois, donc dans l'affichage du prix par groupe (sppc)je suppose.
J'ai pas creusé ton code, là je manque de temps.
Alors voilà un exemple de code empilé qui va à la casse!
une fonction de ce type est à utiliser pour afficher un prix final ou éventuellement une dizaine mais certainement pas une centaine de fois! dès que tu dépasse 3 ou 4 fois l'appel à une fonction qui fait une requête en bdd, tu dois penser à créer une autre fonction qui groupera ta demande pour éviter les requêtes en rafale. Ou alors tu travailles avec des arrays : stockage de valeur en mémoire sous forme de tableau et traitement entièrement via ces tableaux.

Je pense surtout que ton job de développeur doit intégrer aussi un bout de code de ce type :
Code
$commanditaire =(je_suis_prestataire == true)? 'client':'patron';
function je_dis_non_et_j_argumente($question, $reponse, $commanditaire){
  /*
  Là je sais pourquoi on ne peut pas marier la contribution A avec la contribution B à moins de passer 2 mois à tout redévelopper.
  En conséquence de quoi je vais proposer une solution alternative ou présenter la note horaire prévisionnelle.
  */
   if ($commanditaire == 'patron')
   return 'Non monsieur, ça ne fonctionnera pas ou alors ça va coûter 2 mois/homme en dev!';
   if ($commanditaire == 'client')
   return "Oui monsieur, tout est possible et je peux réaliser cela mais il faut repousser la date de mise à disposition du site de 60 jours et je dois revoir mon devis à la hausse en conséquence";
}

Au final il y a une autre option : un serveur dédié!
ça va chauffer coté serveur sql mais ça va tourner quand même et ça te laisse le temps de remettre à plat tout ça pour savoir comment résoudre le problème proprement.
Parce que ce que tu demandes ici n'est pas réalisable en lisant 3 bouts de scripts et en pondant un raccourci miracle à la façon d'une formule magique griffonnée sur un coin de nappe entre le café et le digestif.

Un peu de sérieux! je connais un peu ecotax et je me suis toujours refusé à exploiter ce genre de contribution qui au final ne donne pas un résultat à la mesure du travail pour l’implémenter ni à la mesure du travail coté serveur sql.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
frogger74
posté 27 Feb 2012, 18:40
Message #11


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Déjà l'infographiste que je suis à ses limites en php, donc 2 mois de développement en plus , juste pour rectifier le tir d'une contribution comme ecotax, je laisse tomber, de plus je suis déjà sur serveur dédié... donc je pense qu'il est préférable de tout revoir de zéro, voir même de revenir sur quelques chose de plus fiable, l'osc 2.2 par exemple.

mrgreen.gif
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 19:02
Message #12


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Citation (frogger74 @ 27 Feb 2012, 18:40) *
Déjà l'infographiste que je suis à ses limites en php, donc 2 mois de développement en plus , juste pour rectifier le tir d'une contribution comme ecotax, je laisse tomber, de plus je suis déjà sur serveur dédié...
Avoir des limites, c'est naturel et normal, le php est un langage accessible et basique mais qui évolue énormément.
mais ??? serveur dédié ? ok j'avais oublié j'étais resté sur "too many connexions", un dédié avec 1 Go de ram... ok. Ton PC ou ton Mac, il a combien de RAM ? Bon c'est juste pour que tu te fasses une idée. Le premier Kimsufi chez OVH sur celeron a déjà 2 Go et la gamme d'après on a 16 Go...

Citation (frogger74 @ 27 Feb 2012, 18:40) *
donc je pense qu'il est préférable de tout revoir de zéro, voir même de revenir sur quelques chose de plus fiable, l'osc 2.2 par exemple.
Ah ?quelle différence 2.3 avec osc2.2 ? La 2.3 est juste plus moderne coté structure du code et surtout compatible php5.3 en plus de l'intégration de jQuery. Coté mysql elle est plutôt légèrement mieux que la 2.2, mais pas des masses.
C'est juste la contrib Ecotax qui est en trop il me semble et quand je dis 2 mois c'est avec une grosse louche pour poser un chiffre et caricaturer l'état de fait.
La réalité c'est juste que de vouloir appliquer deux contribs qui touchent autant la gestion des prix, c'est un gros risque de se trouver dans ta situation.
Si tu vires l'ecotax ça sera nettement plus fluide.
Si tu refais la même chose (sppc+ecotax) sur une 2.2 tu rencontreras les mêmes effets.
Déjà sppc mériterait d'être optimisé mais c'est une autre histoire.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
frogger74
posté 27 Feb 2012, 21:19
Message #13


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Salut!


En fait , je compte passer sur un serveur dédié avec infogérance pour me soulager d'un poids (chez EFEDUS) avec 4 giga de RAM contre 1 actuellement. mais cela ne me rassure pas, même si je sais qu'ils pourront me diagnostiquer et configurer le serveur en conséquence, me conseiller, mais ils ne pourront rien de plus pour moi, en ce qui concerne la modification du site en lui même.... car quand ont me dits "boucle infini" pour moi, çà veux dire "explosion de la mémoire", surtout qu'il n'y aura pas que ce site sur ce serveur, bien sûr, les quelques autres sites ne souffrent pas de ce problème...

Mais je ne suis pas sur que seul l'ecotax soit le soucis, je suis pas expert mais j'ai 32000 lignes de ce type, juste si je liste des produits dans le backoffice:

Code
                                            FROM products_attributes
                                               WHERE products_id = '13'
   26/02/2012 22:54:03 [QUERY] SELECT DISTINCT products_options_id
                                               FROM products_options
                                               WHERE products_options_track_stock = 1
   26/02/2012 22:54:03 [QUERY] SELECT products_quantity
                                               FROM products
                                               WHERE products_id = '13'
   26/02/2012 22:54:03 [QUERY] SELECT products_stock_attributes
                                               FROM products_stock
                                               WHERE products_id = '13'
   26/02/2012 22:54:03 [QUERY] SELECT DISTINCT options_id
                                               FROM products_attributes
                                               WHERE products_id = '14'
   26/02/2012 22:54:03 [QUERY] SELECT DISTINCT products_options_id
                                               FROM products_options
                                               WHERE products_options_track_stock = 1
   26/02/2012 22:54:03 [QUERY] SELECT products_quantity
                                               FROM products
                                               WHERE products_id = '14'
   26/02/2012 22:54:03 [QUERY] SELECT products_stock_attributes
                                               FROM products_stock
                                               WHERE products_id = '14'
   26/02/2012 22:54:03 [QUERY] SELECT DISTINCT options_id
                                               FROM products_attributes
                                               WHERE products_id = '15'
   26/02/2012 22:54:03 [QUERY] SELECT DISTINCT products_options_id
                                               FROM products_options
                                               WHERE products_options_track_stock = 1
   26/02/2012 22:54:03 [QUERY] SELECT products_quantity
                                               FROM products
                                               WHERE products_id = '15'


Alors je sais pas, c'est peut être normal, mais il faut que je réfléchisse à tous çà , que je prenne du recul, car la je l'ai vraiment mauvaise, autant de temps de travail, comprendre les rouages, pour un projet qui tombe à l'eau... je suis même prêt à mettre la main à la poche pour résoudre le problème, mais je suis même pas sur du résultat final... moi qui croyait que repartir de zéro sur une nouvelle version d'osc me permettrait d'éviter ce genre de soucis.. mais bon... wacko.gif

Ce message a été modifié par frogger74 - 27 Feb 2012, 21:26.
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 22:43
Message #14


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



ce n'est pas la base qui est mal ficelée, ce sont les contributions qu'il faut optimiser ou les pages qu'il faut gérer.
Il y a des possibilité de mettre les résultats de requête en cache ou d'optimiser les requêtes.

Tu as fait lourd quand même : je pense que QTPRO est le fautif dans le cas des lignes que tu cites : products_options_track_stock n'est pas inclus dans la base de la 2.3.1
si on ajoute sppc et ecotax, je ne suis pas étonné que tu exploses le compteur de requêtes.

C'est tout le problème de ces contributions (une grande majorité) : elles sont développées par des débutants ou des bricoleurs pour répondre à un besoin qui leur est propre sans tenir compte de l'optimisation.
Avantage: c'est une bonne base de développement qu'il faut savoir améliorer, le travail de structure et de génie sont là.
Inconvénient :posée en l'état dans un site et associée à d'autres contributions du même genre et c'est la cata (sans parler des risques de conflits)
Je ne jetterai jamais la pierre à un développeur amateur qui partage ses bricolages, c'est une des forces de l'open source et d'osCommerce. Ce qu'il partage est plein de génie et se générosité. La technique ou la compétence font malheureusement bien souvent défaut (pas toujours, il y a des perles).

Il faut donc savoir quel est ton besoin et comment le résoudre et développer pour ce cas plutôt que de coller un truc tout fait qui répond "à peu près" au besoin mais fait aussi plein d'autres choses. Dans ce cas il est nécessaire de faire le ménage dans les contributions que tu installes.
C'est là qu'une contribution est un petit sac plein de malices, elle offre une méthode, un raisonnement, des bouts de solutions , voire dans certains cas des solutions complètes.

Mais ne va pas rêver, les autres solutions comme prestash0p ou magent0 présentent les mêmes travers. Si la problématique a été pensée dans le coeur, il y a une solution probable pas trop lourde (encore qu'avec magnet0 c'est forcément lourd) sinon c'est de la bricole et les sanctions sont les mêmes (voire pires)




--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
FoxP2
posté 28 Feb 2012, 00:21
Message #15


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



Le développement, ça ne s'invente pas, ça s'apprend.
via des formations solides qui apprennent les process, la rigueur, l'analyse, les concepts, les capacités d'abstraction, la curiosité, bref les bases.
rares sont ceux qui apprennent seuls (les zozotodidactes, on les reconnait vite quand on lit leurs codes)
donc parfois, il faut savoir passer la main. ça évite de perdre du temps, et par conséquence, de l'argent.
Go to the top of the page
 
frogger74
posté 28 Feb 2012, 10:23
Message #16


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



J'avais déjà fait appel à un développeur, mais le résultat ne semble pas être la... à quel développeur pourrais-je faire appel ?
Go to the top of the page
 
FoxP2
posté 28 Feb 2012, 10:54
Message #17


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



Citation (frogger74 @ 28 Feb 2012, 10:23) *
à quel développeur pourrais-je faire appel ?

les annonces se font dans le forum blablabla et le suivi par messagerie personnelle.

(attention à la rédaction de l'annonce, le cahier des charges, sans être détaillé, doit donner une idée du taf à réaliser. ça évitera des contacts sans intérêts)
Go to the top of the page
 
paddybl
posté 28 Feb 2012, 16:48
Message #18


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 475
Inscrit : 22-September 06
Lieu : Lons le saunier(39)
Membre no 12229



salut à tous,

comme on parle d'ecotax je me permet d'intervenir

je me disais bien que j'avais jamais écrit un truc pareil!:
Code
for ($i = 1; $i<= 100; $i++){
  $query = tep_de_query("select SUM(ecotax_price) as ecotax_price from ".TABLE_ECOTAX." where ecotax_rates_id = '$i' ");
  $result = tep_db_fetch_array($query);
}


j'ai cherché partout... hihi
ce que je peux dire, c'est j'ai fait travaille ecotax sans problème ni ralentissement flagrant avec une base de données de plus de 30000 produits.
donc le ralentissement vient certainement d'ailleur, ou d'un codage modifier

comme gnidhal je penserai à une boucle sans fin
que dit un top en ssh sur le serveur? si tu satures mysql
il est logique que ce soit lent partout
et le load average monte t-il?

bizarre ces 170 lignes de demande du tarif de l'éco-participation... depuis quel fichier y a-til cette appel?

autre chose, j'ai plus mon site pour montrer le texte, mais l'affichage de l'éco-participation doit obligatoirement etre TTC entre guillemet!
que ce soit pour un client en HT ou en TTC
c'est pour celà que j'ai un taux de tva différent qui s'applique uniquement aux classes d'éco-participation
le tarif de l'eco-participation ne peu etre déduit de sa taxe... et c'est bien là la difficulté
une écoparticipation à 1€ serra la même pour un client TTC que pour un client HT
tu ne dois pas enlever cette TVA d'apres les textes de loi

les fonctions tep_get_ecotax_price_value et tep_get_ecotax_rate_value cherche respectivement le tarif HT de l'éco-participation et le taux de taxe à appliquer sur celle-ci
si tu as 170 fois ces lignes c'est qu'il y a 170 l'appel ce qui me semble obligatoire... reste à comprendre pourquoi 170 fois.
ca ca m'intrigue


--------------------
oscommerce version ms2fr-060817; contributions: AdminMS2fr_V2.3 - Easypopulate 2.76 - MS2-big_images 1.25 - 2.2-MS2 - BoxImageThemaMS2fr_V2.7 - BUY_TWO_MODULE-V21a - xsell_v2.3 - Your Recent History V3.0 - QTPro.v4.25 - Full-products_on_order1.2 - Ultimate_SEO_URLs 2.2.2 - .buy_now_link_to_button_v1.2c - Site Map MS2 - 2.3a-.robots1.1 - Dynamic Meta Tags - best sellers v1 - bestseller with admin - Review Approval System v1.3_1 - online_offline - SEO_Assistant_V_1.4 - Product Tabs 1.7-2 - avsearch - zones-french_Latin1 - new-faster-checkout - Anti Robot Registration Validation 2.4.01 - anti_spambot_contact_us_1.2 - anti_spambot_review_1_2 - colissimo_1.5.2 - ajax_contrib - GoogleFeeder103 - store feeds.v3.1 - categoriesFrontPage2-3d - Extra pages-info box w-admin 4_6 - PDF data-sheet v.1.7 compatible gif - CCGV5.18 - cvv2_version2 -Edit Order with ecotax- OrderCheck_v2.5.2 with Ecotax- orderlist4.0 - payment_atos_5_00-2.2.4 - payment_bluepaid-2 - Featured_Products_v1.5.8 - newsdesk_v_1.48.3 - .FAQDesk.v1.01.1 - French_Chronopost_Shipping - Popup Estimated Shipping v1.7b -optimize tax ver1.2-query debug 1.7-faster configuration cache 1.32- Print Order Receipt v1.4with ecotax- b2bsuite corrigé par moi ;o) ,

Ecotax v1.4.1 Plus Export, Paypal donation et Infinit'Images par moi même et d'autres à venir...
Go to the top of the page
 
Gnidhal
posté 28 Feb 2012, 17:46
Message #19


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Citation (paddybl @ 28 Feb 2012, 16:48) *
les fonctions tep_get_ecotax_price_value et tep_get_ecotax_rate_value cherche respectivement le tarif HT de l'éco-participation et le taux de taxe à appliquer sur celle-ci
si tu as 170 fois ces lignes c'est qu'il y a 170 l'appel ce qui me semble obligatoire... reste à comprendre pourquoi 170 fois.
ca ca m'intrigue

Salut paddybl, je ne pense pas que ça soit directement ta contrib qui provoque le problème mais son mariage avec d'autres contribs comme SPPC et QTPRO.
Si faire appel à une fonction qui contient une requête pour afficher un prix est parfaitement portable et simple, si on appelle cette même fonction plus de 5 fois dans une même page c'est qu'il est urgent de chercher comment grouper ces appels dans une même requête.



--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
frogger74
posté 28 Feb 2012, 23:19
Message #20


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Salut Paddybl,

Citation (paddybl @ 28 Feb 2012, 16:48) *
que dit un top en ssh sur le serveur? si tu satures mysql
il est logique que ce soit lent partout
et le load average monte t-il?


Bah en fait, je n'ai pas d'accès SSH , donc je n'ai qu'un accès limité. unsure.gif

Citation (paddybl @ 28 Feb 2012, 16:48) *
bizarre ces 170 lignes de demande du tarif de l'éco-participation... depuis quel fichier y a-til cette appel?



En fait pour générer cette foule de ligne , il me suffit de faire juste modifier un produit dans le backoffice:

J'ai 177 lignes de ce type:

Code
28/02/2012 23:01:40 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '35'
28/02/2012 23:01:40 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '19'
28/02/2012 23:01:40 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '20'
28/02/2012 23:01:40 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '21'
28/02/2012 23:01:40 [QUERY] select SUM(ecotax_price) as ecotax_price from ecotax where ecotax_rates_id = '22'


et 177 lignes de ce type:

Code
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '35'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '19'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '20'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '21'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '22'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '23'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '24'
28/02/2012 23:01:40 [QUERY] select SUM(tax_rate) as tax_rate from ecotax where ecotax_rates_id = '25'


et 193 lignes de ce type:
Code
28/02/2012 23:01:30 [QUERY] select configuration_group_id as cgID, configuration_group_title as cgTitle from configuration_group where visible = '1' order by sort_order
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '0' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '219' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '210' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '220' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '226' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '177' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '218' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '1' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '35' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '36' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '78' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '79' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '80' order by c.sort_order, cd.categories_name
28/02/2012 23:01:30 [QUERY] select c.categories_id, cd.categories_name, c.parent_id from categories c, categories_description cd where c.categories_id = cd.categories_id and cd.language_id = '1' and c.parent_id = '83' order by c.sort_order, cd.categories_name


Ce message a été modifié par frogger74 - 28 Feb 2012, 23:23.
Go to the top of the page
 
paddybl
posté 29 Feb 2012, 09:28
Message #21


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 475
Inscrit : 22-September 06
Lieu : Lons le saunier(39)
Membre no 12229



Je suis d'accord avec toi gnidhal,c'est pas normal qu'il y ait 170 puis 190 fois le même type d'appel aux fonctions.
disont que ce qui était compliqué avec l'éco-participation, quand j'ai réflechi aux algorythmes, a été de garder le code de base osc
le plus possible à l'original.
mais il fallait pouvoir ajouter cette ecotax en respectant les directives de la loi... donc taux de tva indépendant et variable suivant les cas.
ouff il l'on pas fait "le variable" facon 5.5, mias ca reste d'actualité sir on change de TVA... vont-il appliqué le nouveau taux ou l'ancien? mystère...
de plus il fallait pouvoir ajuster c'est ecotaxe en fonction du type de produit et des lots etc...
reste donc que chaque produit à sont prix, sa tva et sont ecoparticipation ou pas. les fonctions ne sont pas plus lourde que celle qui cherche le taux de tva et l'avantage c'est qu'on peu l'appeler quand on en a besoin sans alourdir encore nos requètes avec des jonctions difficile à intégrer dans un code déjà modifié (souvent)
la ou tu as raison encore gnidhal, c'est que c'est forcement optimisable. mais si tu te rappels bien. j'ai mis a disposition de la communauté assez rapidement tout le développement d'ecotax pour que chacun puisse intégrer cette "con nerie de loi" et ne pas se retrouver hors la loi.
depuis personne n'a réellement repris le code de base comme on le voit pour d'autres contribes.
de mon coté, j'ai laché le projet depuis un bon moment.

mais revenons en à frogger

pour moi il faut revoir l'intégration du categories.php... y a un problème de boucle mal positionné qui rappel ces fonctions X fois inutilement.
un acces ssh n'est-il pas obligatoire sur un serveur dédié? moi je vois pas comment je pourrais régler le mien si j'avais pas ssh... pas normal ca. tu ne peux pas voir ce qui sature sans...
et sur un dédié il y a plein de raisons qui peuvent ralentir ton serveur dans les réglages... config apache, mysql, php....
sans pour autant que ce soit le code qui ait un problème. (d'apres mon expérience.)

Ce message a été modifié par paddybl - 29 Feb 2012, 09:31.


--------------------
oscommerce version ms2fr-060817; contributions: AdminMS2fr_V2.3 - Easypopulate 2.76 - MS2-big_images 1.25 - 2.2-MS2 - BoxImageThemaMS2fr_V2.7 - BUY_TWO_MODULE-V21a - xsell_v2.3 - Your Recent History V3.0 - QTPro.v4.25 - Full-products_on_order1.2 - Ultimate_SEO_URLs 2.2.2 - .buy_now_link_to_button_v1.2c - Site Map MS2 - 2.3a-.robots1.1 - Dynamic Meta Tags - best sellers v1 - bestseller with admin - Review Approval System v1.3_1 - online_offline - SEO_Assistant_V_1.4 - Product Tabs 1.7-2 - avsearch - zones-french_Latin1 - new-faster-checkout - Anti Robot Registration Validation 2.4.01 - anti_spambot_contact_us_1.2 - anti_spambot_review_1_2 - colissimo_1.5.2 - ajax_contrib - GoogleFeeder103 - store feeds.v3.1 - categoriesFrontPage2-3d - Extra pages-info box w-admin 4_6 - PDF data-sheet v.1.7 compatible gif - CCGV5.18 - cvv2_version2 -Edit Order with ecotax- OrderCheck_v2.5.2 with Ecotax- orderlist4.0 - payment_atos_5_00-2.2.4 - payment_bluepaid-2 - Featured_Products_v1.5.8 - newsdesk_v_1.48.3 - .FAQDesk.v1.01.1 - French_Chronopost_Shipping - Popup Estimated Shipping v1.7b -optimize tax ver1.2-query debug 1.7-faster configuration cache 1.32- Print Order Receipt v1.4with ecotax- b2bsuite corrigé par moi ;o) ,

Ecotax v1.4.1 Plus Export, Paypal donation et Infinit'Images par moi même et d'autres à venir...
Go to the top of the page
 
Gnidhal
posté 29 Feb 2012, 09:44
Message #22


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Citation (paddybl @ 29 Feb 2012, 09:28) *
mais si tu te rappels bien. j'ai mis a disposition de la communauté assez rapidement tout le développement d'ecotax pour que chacun puisse intégrer cette "con nerie de loi" et ne pas se retrouver hors la loi.
depuis personne n'a réellement repris le code de base comme on le voit pour d'autres contribes.
de mon coté, j'ai laché le projet depuis un bon moment.

Oui je me souviens smile.gif et j'ai essayé de mettre le nez dans cette usine à gaz mais après renseignements auprès de plusieurs comptables, aucun ne m'ayant donné la même réponse sur les obligations légales et le système de calcul, j'ai lâché l'affaire avant de commencer. En réalité, je crois que les comptables ne savent pas, pour la plupart, comment on gère en pratique l'eco-participation.
Comme je le dis plus haut il me semble qu'il s'agit d'une taxe prélevée à la source (chez le fabricant) en fonction d'un barème par classe de produit qui vient se greffer sur le prix de base HT. Donc pas de calcul compliqué, le comptable connaît en principe le montant fixe par produit et le reporte dans une colonne. Mais il ne me semble pas qu'il ait de reversement par le vendeur, son obligation se limitant à l'affichage du prix avec la mention "dont eco-participation de xoxo€".
Si l'affichage est sollicité pour chaque produit je ne crois pas que la somme totale soit nécessaire sur la facture.
Enfin, c'est ce que j'ai retiré de mes discussions avec des comptables.
Donc ça pourrait aller simplement dans la description du produit sans jamais être comptabilisé.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
paddybl
posté 29 Feb 2012, 11:26
Message #23


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 475
Inscrit : 22-September 06
Lieu : Lons le saunier(39)
Membre no 12229



tient j'ai retrouvé ca en réponse à un courrier à la dgccrf:

Citation
DIRECTION GENERALE DE LA CONCURRENCE,
DE LA CONSOMMATION ET DE LA REPRESSION DES FRAUDES
59, BD VINCENT AURIOL TELEDOC
75703 PARIS CEDEX 13
PARIS, LE 9 NOVEMBRE 2006
Madame, Monsieur,
Vous avez fait état, à plusieurs reprises, de difficultés rencontrées par vos adhérents pour établir, à
partir du 15 novembre prochain, des factures conformes aux dispositions législatives et réglementaires
relatives au financement des DEEE ménagers.
L’entrée en vigueur des agréments des organismes environnementaux à cette date place les
professionnels devant l’obligation d’établir des factures conformes à un ensemble de prescriptions
relatives à la facturation (article L.441-3 du code de commerce) et à l’environnement (articles 17 et 25
du décret dit « DEEE » et article L.541-10-2 du code de l’environnement).
Elles doivent ainsi respecter :
- L’article L. 441-3 du code de commerce relatif à la facturation (il en est déduit que la
contribution environnementale ne peut faire l’objet ni d’une ligne séparée ni d’une colonne
séparée sur la facture) ;
- l’article 17 du décret 2005-829 dit « DEEE » qui prévoit une mention particulière figurant au
bas de la facture de vente, du coût correspondant à l’élimination des déchets électriques et
électroniques ménagers « historiques », c’est-à-dire mis sur le marché avant le 13 août 2005
(date d’entrée en vigueur de la directive référente) ;
- l’article 25 de ce même décret prévoyant des sanctions pénales si ce coût « unitaire » n’est pas
mentionné sur les factures ;
- l’article L. 541-10-2 du code de l’environnement adopté par la loi de finances rectificative du
31 décembre 2005, prévoyant que ces coûts unitaires ne peuvent faire l’objet de réfaction et
doivent être répercutés à l’identique jusqu’au consommateur final (de ce fait, les rabais,
remises, ristournes et escomptes ne peuvent leur être appliqués).


et ca directement dans le décret:
Citation
2.2.1 - Champ d’application
En application de l’article L.541-10-2 du code de l’environnement, les producteurs et les
distributeurs « font apparaître, en sus du prix hors taxe, en pied de factures de vente de
tout nouvel équipement électrique et électronique ménager, les coûts unitaires supportés
pour l'élimination de ces déchets ».
• Producteur
Selon l’article 3.1°du décret du 20 juillet 2005 « est considérée comme producteur toute
personne qui fabrique, importe ou introduit sur le marché national à titre professionnel des
équipements électriques et électroniques, sauf si ces équipements sont vendus sous la seule
marque d'un revendeur. Dans ce cas, le revendeur est considéré comme producteur ».
C’est le producteur ainsi défini, qui doit s’acquitter des obligations « d'enlever ou de faire
enlever, puis de traiter ou de faire traiter les déchets d'équipements électriques et
électroniques ménagers collectés sélectivement», soit en mettant en place un système
individuel, soit en adhérant à un organisme agréé auquel il verse une contribution financière.
L’organisme agréé établit une facture à partir du bordereau communiqué par le producteur
relatant les poids, les quantités, les catégories et les références des équipements électriques ou
électroniques ménagers mis sur le marché.
• Distributeur
Selon l’article 3.2° du décret du 20 juillet 2005 « est considérée comme distributeur toute
personne qui, quelle que soit la technique de distribution utilisée, y compris par
communication à distance, fournit à titre commercial des équipements électriques et
électroniques à celui qui va les utiliser».


un simple import fait de nous des producteurs... si on le place sous sa marque. c'est souvent le cas

et puis ca:
Citation
Informer les acheteurs du coût unitaire de l'élimination des déchets historiques :
Depuis le 15 novembre 2006, les revendeurs d'équipements électriques et électroniques ménagers
sont tenus d'informer leurs acheteurstdu montant de contribution visible dont les producteurs se
sont acquittés pour chaque équipement qu'ils mettent sur le marché et qui a déjà été répercutée
par les différents acteurs de la chaîne.
Le décret n02005-829 du 20 juillet 2005 prévoit en effet que les producteurs (fabricants, importateurs
ou distributeurs marques propres) assurent l'enlèvement et le traitement des DEEE ménagers
collectés sélectivement. Ils adhèrent pour cela à un organisme agréé qui organise cet enlèvement
et ce traitement et auquel ils versent, pour financer leurs obligations, une contribution par
équipement mis sur le marché. Le montant de cette contribution par équipement est la
contribution visible, également appelée éco-contribution, éco-participation, contribution
environnementale ou coût de l'élimination. Ce montant est répercuté à l'identique et de manière
visible jusqu'au consommateur final pendant une période transitoire. La contribution visible est un
élément du coût total de l'équipement et non une taxe.

Ce montant doit être indiqué par le fournisseur de l'équipement. C'est le producteur qui lui aura
lui-même transmis cette information. A défaut, il n'incombe pas au revendeur de déterminer luimême
le montant de la contribution, mais il convient toutefois de solliciter ses fournisseurs de
manière à ce que cette information lui soit transmise dans les meilleurs délais 3 les
distributeurs, en aval, soient informés du montant de la contribution à afficher.
Le montant de la contribution environnementale pourra être différent pour un même type de
produit, en fonction de I'organisme agréé auquel adhère le producteur de l'équipement

Par quels moyens ?

Le montant de la contribution environementale doit apparaÎtre au bas de la facture de vente
(autant de mentions en bas de facture que d'équipements vendus). Elle ne peut faire l'objet
d'aucune marge ou réfaction lors des négociations commerciales entre les différents revendeurs.


Ce message a été modifié par paddybl - 29 Feb 2012, 11:58.


--------------------
oscommerce version ms2fr-060817; contributions: AdminMS2fr_V2.3 - Easypopulate 2.76 - MS2-big_images 1.25 - 2.2-MS2 - BoxImageThemaMS2fr_V2.7 - BUY_TWO_MODULE-V21a - xsell_v2.3 - Your Recent History V3.0 - QTPro.v4.25 - Full-products_on_order1.2 - Ultimate_SEO_URLs 2.2.2 - .buy_now_link_to_button_v1.2c - Site Map MS2 - 2.3a-.robots1.1 - Dynamic Meta Tags - best sellers v1 - bestseller with admin - Review Approval System v1.3_1 - online_offline - SEO_Assistant_V_1.4 - Product Tabs 1.7-2 - avsearch - zones-french_Latin1 - new-faster-checkout - Anti Robot Registration Validation 2.4.01 - anti_spambot_contact_us_1.2 - anti_spambot_review_1_2 - colissimo_1.5.2 - ajax_contrib - GoogleFeeder103 - store feeds.v3.1 - categoriesFrontPage2-3d - Extra pages-info box w-admin 4_6 - PDF data-sheet v.1.7 compatible gif - CCGV5.18 - cvv2_version2 -Edit Order with ecotax- OrderCheck_v2.5.2 with Ecotax- orderlist4.0 - payment_atos_5_00-2.2.4 - payment_bluepaid-2 - Featured_Products_v1.5.8 - newsdesk_v_1.48.3 - .FAQDesk.v1.01.1 - French_Chronopost_Shipping - Popup Estimated Shipping v1.7b -optimize tax ver1.2-query debug 1.7-faster configuration cache 1.32- Print Order Receipt v1.4with ecotax- b2bsuite corrigé par moi ;o) ,

Ecotax v1.4.1 Plus Export, Paypal donation et Infinit'Images par moi même et d'autres à venir...
Go to the top of the page
 
FoxP2
posté 29 Feb 2012, 11:50
Message #24


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



il y a une piste à explorer :
étant donné que le site est sur un dédié, je suppose que l'ensemble des fonction de programmation du SGBD (en l’occurrence mysql ici) est disponible.
il serait peut être opportun de déporter le code sql dans la partie cliente de l'application avec des procédures stockées déterministes et des user definition pour accélérer, voire optimiser le traitement des requêtes. si l'indexage est correctement effectué, les calculs mathématiques intégrés au moteur du sgbd seront bien meilleures, sachant que mysql s'en charge lui même.
en répartissant intelligemment la charge entre l'appli (php pour l'affichage) et mysql pour le crud, on peut fabriquer une ferrari.
je ne parle même pas de la lisibilité des fichiers qui s'en trouve forcément allégée.
Go to the top of the page
 
paddybl
posté 29 Feb 2012, 12:08
Message #25


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 475
Inscrit : 22-September 06
Lieu : Lons le saunier(39)
Membre no 12229



je dis pas le contraire fox... il étaient tout à fait possible de charger un array de toutes les ecotaxes en mémoire plutot que de le redemander à chaque fois.
mais perso de tout les sites qui on intégré ecotax personne ne m'avais rapporté un problème de surcharge jusqu'à aujourd'hui

et un array de plusieurs tables complétes avec tri, ca charge la mémoire quand même.. il est déjà limité à ce niveau...

et je le redis car j'en suis quazi sur, le problème de frogger74 vient d'une mauvaise intégration d'ecotax (ou autres contribes d'ailleurs) dans son fichier categories.php
le simple fait de cliquer sur modifier ne devrait pas générer autant de demande à la base de données

Ce message a été modifié par paddybl - 29 Feb 2012, 12:28.


--------------------
oscommerce version ms2fr-060817; contributions: AdminMS2fr_V2.3 - Easypopulate 2.76 - MS2-big_images 1.25 - 2.2-MS2 - BoxImageThemaMS2fr_V2.7 - BUY_TWO_MODULE-V21a - xsell_v2.3 - Your Recent History V3.0 - QTPro.v4.25 - Full-products_on_order1.2 - Ultimate_SEO_URLs 2.2.2 - .buy_now_link_to_button_v1.2c - Site Map MS2 - 2.3a-.robots1.1 - Dynamic Meta Tags - best sellers v1 - bestseller with admin - Review Approval System v1.3_1 - online_offline - SEO_Assistant_V_1.4 - Product Tabs 1.7-2 - avsearch - zones-french_Latin1 - new-faster-checkout - Anti Robot Registration Validation 2.4.01 - anti_spambot_contact_us_1.2 - anti_spambot_review_1_2 - colissimo_1.5.2 - ajax_contrib - GoogleFeeder103 - store feeds.v3.1 - categoriesFrontPage2-3d - Extra pages-info box w-admin 4_6 - PDF data-sheet v.1.7 compatible gif - CCGV5.18 - cvv2_version2 -Edit Order with ecotax- OrderCheck_v2.5.2 with Ecotax- orderlist4.0 - payment_atos_5_00-2.2.4 - payment_bluepaid-2 - Featured_Products_v1.5.8 - newsdesk_v_1.48.3 - .FAQDesk.v1.01.1 - French_Chronopost_Shipping - Popup Estimated Shipping v1.7b -optimize tax ver1.2-query debug 1.7-faster configuration cache 1.32- Print Order Receipt v1.4with ecotax- b2bsuite corrigé par moi ;o) ,

Ecotax v1.4.1 Plus Export, Paypal donation et Infinit'Images par moi même et d'autres à venir...
Go to the top of the page
 

2 Pages V   1 2 >
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 19th March 2024 - 10:50
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)