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 :

[Tableaux] pb au niveau des tableaux et question sur temp maximal d'exécution dépassé


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut [Tableaux] pb au niveau des tableaux et question sur temp maximal d'exécution dépassé
    Bonjour tout le monde,

    j'ai 2 questions :

    - j'ai un temps maximal d'execution que je dépasse et qui est fixé à 30 secondes. Je ne peux pas augmenter ce temps d'exécution car je n'ai pas les droits, je cherche donc à optimiser mon script, mais ce temps tient compte de l'exécution de mon script ou de ma boule? (car dans mon script j'ai une boucle WHILE, donc si je découpe en plusieurs boucles WHILE de moins de 30 secondes ça marchera?). J'espère avoir été clair...

    - mon 2ème soucil se situe au niveau des tableaux, je copie mes données dans un tableau dans la boucle WHILE, mais je dois mal le faire :

    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
    while (ocifetch($resultat)){
    	$DDATE=ociresult($resultat,1);
    	$SYSCAA=ociresult($resultat,2);
    	$GPS=ociresult($resultat,3);
    	$SGTQS=ociresult($resultat,4);
    	$NUMES=ociresult($resultat,5);
    	$NBR=ociresult($resultat,6);
    	$tab_ddate = array($index => "$DDATE");
    	$tab_syscaa  = array($index => "$SYSCAA");
    	$tab_gps = array($index => "$GPS");
    	$tab_sgtqs = array($index => "$SGTQS");
    	$tab_numes = array($index => "$NUMES");
    	$tab_nbr = array($index => "$NBR");	
    	echo $tab_numes[8];
    	$index=$index+1;
    }
    Car là ca m'affiche qu'une seule fois $tab_numes[8] alor qu'en fait il devrait être afficher des milliers de fois, car il y a 4000 tours de boucles environ. Je pense que l'index est écrasé à chaque fois... Comment puis-je faire pour copier dans tab[1], puis tab[2], puis tab[3], ....

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab_ddate = array($index => "$DDATE");
    Devrait etre plutot comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $i=0; (avant boucle)
    boucle
    $tab_ddate[$i] = "$DDATE";
    $i++;
    finboucle
    Idem pour les autres tableaux
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  3. #3
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    Merci, ca fonctionne, mon problème sur les tableaux est donc résolu. Il ne me reste plus que ma première question sur le temps maximal d'exécution qui concerne le script ou la boucle?

  4. #4
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Voilà ma fonction de récupération de données avec oci (pour une base oracle) qui ne pose pas de soucis pour de nombreux résultats retournés

    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
    function req_data($query)
    {	
    	$link_oracle = connect(tonlogin, tonpass , tonhost);
     
    	// Vérification de la syntaxe de la requête qui renvoie un état à utiliser dans les fonctions suivantes
    	$result = oci_parse($link_oracle,$query);
     
    	if (oci_execute($result)) {
    		if (!oci_fetch_row($result)) {
    			//echo ("Donnée(s) introuvable(s) dans la base");
    			return false;
    		}
    	}
     
    	// On relance la requête car oci_fetch_row a décalé d'une ligne la réponse
    	oci_execute($result);
     
    	$i = 0;
     
    	// Tant qu'on a des lignes retournées
    	while ($res = oci_fetch_array($result,OCI_ASSOC+OCI_RETURN_NULLS))
    	{
    		$tab_res[$i] = $res;
    		$i++;
    	}
    	oci_close($link_oracle);
    	return $tab_res;
    }
     
    function connect($login, $pass, $host)
    {
    	$link_oracle = oci_pconnect($login, $pass, $host)
    		or die("Impossible de se connecter : " .ora_error());
     
    	return $link_oracle;
    }
    En espérant que ça te soit utile
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  5. #5
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    tu copies les données dans un tableau comme je le fais aussi, et tu en fais quoi après? tu les inserts dans une autre base? Car moi je dois récupérer ntre 3000 et 5000 lignes d'une base Oracle distante pour les copier dans ma base locale MySQL. J'ai pas mal galérer à trouver une solution, car au début je faisais un INSERT dans ma boucle WHILE, donc le temps maximale d'exécution était largement dépassé :/ ... Donc là je copies toutes mes données dans des tableaux, puis je fais une seconde boucle WHILE pour l'insertion...

    Merci de ton aide

  6. #6
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    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
    $tab_ddate = array();
    $tab_syscaa = array();
    $tab_gps = array();
    $tab_sgtqs = array();
    $tab_numes = array();
    $tab_nbr = array();
     
    while (ocifetch($resultat)){
    	$DDATE=ociresult($resultat,1);
    	$SYSCAA=ociresult($resultat,2);
    	$GPS=ociresult($resultat,3);
    	$SGTQS=ociresult($resultat,4);
    	$NUMES=ociresult($resultat,5);
    	$NBR=ociresult($resultat,6);
    	$tab_ddate[$index] = "$DDATE";
    	$tab_syscaa[$index]  = "$SYSCAA";
    	$tab_gps[$index] = "$GPS";
    	$tab_sgtqs[$index] = "$SGTQS";
    	$tab_numes[$index] = "$NUMES";
    	$tab_nbr = "$NBR";	
    	$index=$index+1;
    }
    echo $index;
     
    include ('connexion_pems.ini');
    for ($i=1; $i <= 100; $i++) {
    	$sql="insert INTO historique (DDATE,SYSCAA,GPS,SGTQS,NUMES,NBR) VALUES ('$tab_ddate[$i]','$tab_syscaa[$i]',
    		'$tab_gps[$i]','$tab_sgtqs[$i]','$tab_numes[$i]','$tab_nbr[$i]')";
    	$res = mysql_query($sql) or die ("requete incorrecte au niveau de la copie de donnees a partir de ICB");
    }
    for ($i=101; $i <= 200; $i++) {
    	$sql="insert INTO historique (DDATE,SYSCAA,GPS,SGTQS,NUMES,NBR) VALUES ('$tab_ddate[$i]','$tab_syscaa[$i]',
    		'$tab_gps[$i]','$tab_sgtqs[$i]','$tab_numes[$i]','$tab_nbr[$i]')";
    	$res = mysql_query($sql) or die ("requete incorrecte au niveau de la copie de donnees a partir de ICB");
    }
    ca marche pas, je sais plus trop comment faire... j'ai des tableaux qui vont jusqu'à 2988 et j'arrive à copier dans ma base locale MySQL que 172, après le temps maximale d'exécution de 30 secondes est dépassée arf arf!

    Il est pas possible de créer une requête d'insertion géante? je m'explique. J'aimerais créer une requête du genre :
    INSERT INTO maBase (col1,col2,col3) VALUES (tab1[1],tab2[1],tab3[1])(tab1[2],tab2[2],tab3[2])(tab1[3],tab2[3],tab3[3])...
    c'est pas possible ça? et c'est pas plus rapide?

  7. #7
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Citation Envoyé par johnkro
    tu copies les données dans un tableau comme je le fais aussi, et tu en fais quoi après? tu les inserts dans une autre base? Car moi je dois récupérer ntre 3000 et 5000 lignes d'une base Oracle distante pour les copier dans ma base locale MySQL. J'ai pas mal galérer à trouver une solution, car au début je faisais un INSERT dans ma boucle WHILE, donc le temps maximale d'exécution était largement dépassé :/ ... Donc là je copies toutes mes données dans des tableaux, puis je fais une seconde boucle WHILE pour l'insertion...

    Merci de ton aide

    Après les avoir copiées dans mon tableau je m'en sers pour calculs/affichages etc...

    Une fois toutes les données récupérées je ne vois pas le souci pour les insérer comme tu as fait...
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/07/2013, 16h07
  2. [WD-2010] Problème convertion PDF au niveau des tableaux
    Par carlux3 dans le forum Word
    Réponses: 1
    Dernier message: 21/06/2013, 01h15
  3. Affichage des tableaux dans la liste des tableaux
    Par Hello_World dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 11/05/2009, 02h50
  4. Réponses: 3
    Dernier message: 07/04/2006, 16h06

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