IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimiser ce code


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut Optimiser ce code
    Bonjour,

    Quelqu'un aurait il une idée pour optimiser ce script, sachant que $t>4000 et que la table "collection" est elle aussi > 4000, ceci afin d'éviter l'erreur

    Fatal error: Maximum execution time of 60 seconds exceeded in

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
     
    if($maj=="ok") {
    // mise à jour de la table du membre		
    		$temps_debut = microtime(true);
    		$result = mysql_query("SELECT * FROM timbresdefrance_collections.".$collection);
    			while ($row = mysql_fetch_array($result, MYSQL_NUM))
    			{ 
    			for($i=1;$i<$t+1;$i++)
    			{
    			 if($data_base[$i][0]==trim($row[1]) or $data_base[$i][7]==trim($row[1]))
    			 	{
     
    	$sql='REPLACE INTO timbresdefrance_collections.'.$collection.' VALUES  ("'.$row[0].' "," '.$data_base[$i][7].' ","'.$row[2].'","'.$data_base[$i][1].'","'.$row[4].'","'.$row[5].'","'.$data_base[$i][2].'","'.$row[7].'","'.$row[8].'","'.$data_base[$i][3].'","'.$row[10].'","'.$data_base[$i][4].'","'.$data_base[$i][5].'","'.$row[13].'","'.$row[14].'","'.$data_base[$i][6].'","'.$row[16].'","'.$row[17].'","'.$row[18].'","'.$row[19].'","'.$row[20].'","'.$row[21].'","'.$row[22].'","'.$row[23].'","'.$row[24].'","'.$row[25].'","'.$row[26].'","'.$row[27].'","'.$row[28].'","'.$row[29].'","'.$row[30].'","'.$row[31].'")';	
     
    			mysql_query($sql)or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());				 
     
    				} // fin de if($data_base[$i][0]==trim($row[1]) or $data_base[$i][7]==trim($row[1]))
     
    			} //fin de for($i=1,$i<$t+1,$i++)
     
    			} // fin de for($j=1;$j<$t+1;$j++)
     
    $temps_fin = microtime(true);
    echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
    echo('<br>');			
     
    }//fin de script
     
    ?>
    Merci
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Hum la situation et le script, de ce que j'en vois, me paraîssent anormaux.
    Donne plus d'infos : le schéma de la BdD, que fais-tu et pourquoi ? A quoi correspondent $t et $data_base ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    En fait, je dois comparer deux tables. L'une servant de base pour la mise à jour de l'autre.
    $t est un simple compteur et $data_base est un tableau issu de la table servant de base. J'ai procéder de cette manière car je pense que le traitement de deux tables imbriquées dans un même script serait très long à traité.

    La table servant de base contient plus de 9000 enregistrements et la table à mettre à jour plus de 4000.

    Donc je pense qu'un script comme ceci ne serait pas exploitable

    lecture de la table servant de base
    lecture de la table à mettre à jour
    comparaison et mise à jour si nécessaire

    à moins que je me trompe, car ça fait lire en totalité la table à mettre à jour pour chaque ligne de la table servant de base.

    Voila ou j'en suis pour l'instant, car je ne suis pas un pro de la programmation
    Merci
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par michel71 Voir le message
    En fait, je dois comparer deux tables. L'une servant de base pour la mise à jour de l'autre.
    Peux-tu détailler ?

    J'ai procéder de cette manière car je pense que le traitement de deux tables imbriquées dans un même script serait très long à traité.
    Oui il vaut mieux de requêter en boucle autant que possible.

    La table servant de base contient plus de 9000 enregistrements et la table à mettre à jour plus de 4000.
    Ce n'est donc pas grand chose.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    si du dois comparer des table et les mettre a jour une seule requete SQl peu suffire

  6. #6
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut
    Bon j'ai modifié mon script comme suit, mais j'ai toujours deux problèmes :

    1) le temps d'exécution est > 48 (temps Windows) donc théoriquement ça ne passe pas

    2) cette erreur : Warning: mysql_query() expects parameter 1 to be string, resource given in C:\wamp\www\timbres_VER2-wamp\espace-perso\gestion-collec\ajout_fiche.php on line 156
    Erreur SQL !Resource id #11

    structure de la ligne 11
    CHAMP TYPE INTERCLASSEMENT ATTRIBUT NULL DEFAUT
    photo text latin1_swedish_ci Non Aucun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    <?php 
    	//mise à jour de la collection
     if($maj=="ok") {
     
    $temps_debut = microtime(true);
     
    	$result = mysql_query("SELECT * FROM collec");
    	while ($row = mysql_fetch_array($result, MYSQL_NUM))
    		{
     
    					if (trim($row[24])=='classique' && trim($row[28])<>'Attente N° Y et T')
    				{
     
    					$chemin='XXX';
    				if(@getimagesize('../../image/photo-timbre/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/photo-timbre/';
    					}					
    				if(@getimagesize('../../image/classique/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/classique/';
    					}
    				if(@getimagesize('../../image/image-2007/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2007/';
    					}					
    				if(@getimagesize('../../image/image-2008/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2008/';
    					}					
    				if(@getimagesize('../../image/image-2009/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2009/';
    					}	
    				if(@getimagesize('../../image/image-2010/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2010/';
    					}
    				if(@getimagesize('../../image/image-2011/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2011/';
    					}	
    				if(@getimagesize('../../image/image-2012/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2012/';
    					}
    				if(@getimagesize('../../image/image-2013/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2013/';
    					}
    				if(@getimagesize('../../image/image-2014/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/image-2014/';
    					}
    				if(@getimagesize('../../image/bloc/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/bloc/';
    					}
    				if(@getimagesize('../../image/Croix rouge/'.trim($row[11]))==true) 
    					{
    						$photo=stripslashes(htmlentities(trim($row[11])));
    						$chemin='../../image/Croix rouge/';
    					}																																				
    				$desi=trim($row[2]);
    				$annee=stripslashes(htmlentities(trim($row[5])));			
    				$valneuf=stripslashes(htmlentities(trim($row[13])));
    				$valneufchar=stripslashes(htmlentities(trim($row[14])));
    				$valoblit=stripslashes(htmlentities(trim($row[15])));
    				$info=trim($row[10]);
    				$num=trim($row[1]);
    				$num_remplace=trim($row[28]);
     
    				$tabe='/&eacute;/';$replacement= "é";
    		$desi=preg_replace($tabe, $replacement, $desi);
    				$tabe='/&egrave;/';$replacement= "è";
    		$desi=preg_replace($tabe, $replacement, $desi);
    	  			$tabe='/amp;/';$replacement= "";
    		$desi=preg_replace($tabe, $replacement, $desi);
     
    				$tabe='/&eacute;/';$replacement= "é";
    		$info=preg_replace($tabe, $replacement, $info);
    				$tabe='/&egrave;/';$replacement= "è";
    		$info=preg_replace($tabe, $replacement, $info);
    	  			$tabe='/amp;/';$replacement= "";
    		$info=preg_replace($tabe, $replacement, $info);
     
    //............................................................................................		
    			$resultat = mysql_query("SELECT * FROM timbresdefrance_collections.".$collection." Where num=".$num." or num=".$num_remplace."");
    			while ($data = mysql_fetch_array($resultat, MYSQL_NUM))
    			{
    	$sql='REPLACE INTO timbresdefrance_collections.'.$collection.' VALUES  ("'.$data[0].' "," '.$num_remplace.' ","'.$data[2].'","'.$valneuf.'","'.$data[4].'","'.$data[5].'","'.$valneufchar.'","'.$data[7].'","'.$data[8].'","'.$valoblit.'","'.$data[10].'","'.$photo.'","'.$info.'","'.$data[13].'","'.$data[14].'","'.$chemin.'","'.$data[16].'","'.$data[17].'","'.$data[18].'","'.$data[19].'","'.$data[20].'","'.$data[21].'","'.$data[22].'","'.$data[23].'","'.$data[24].'","'.$data[25].'","'.$data[26].'","'.$data[27].'","'.$data[28].'","'.$data[29].'","'.$data[30].'","'.$data[31].'")';	
     
    			mysql_query($sql)or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());	
    			}
    //..................................................................................................			
     
    		} // fin de if (trim($row[24])=='classique' && trim($row[28])<>'Attente N° Y et T')	
    		} // fin de while ($row.....
    $_SESSION['tot']=$t;
    $temps_fin = microtime(true);
    echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
    echo('<br>');	
     
    }//fin de script		
    ?>
    <?php
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi faire un getimagesize alors que tu ne le récupère pas ?
    pourquoi faire plein de preg_replace unique alors que str_reaplace sera plus simple et de tout facon tu reproduit mais en plus compliquer html_entity_decode ?

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 09h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 11h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 15h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 12h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo