Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2006, 10h25   #1
Membre habitué
 
Avatar de johnkro
 
Étudiant
Inscription : juin 2006
Messages : 276
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 276
Points : 146
Points : 146
Envoyer un message via MSN à johnkro
Par défaut pb de temps maximum d'execution

bjr tlm,

g un pb de temps maximum d'execution sur un script php. Je me suis renseigné sur le web, j'ai cru comprendre qu'il y avait 2 façons de l'augmenter:
set('max_time_execution',int) sur le serveur
et set_limit_time dans le script php.
Vu que je ne suis pas administrateur du serveur, je voudrais des renseignements sur la seconde solution svp.

Mon problème est qu'il y a beaucoup de donnéées, j'arrive a les lire mais je n'arrive pas a les copier dans ma base en locale car il y a trop de données et mon traitement dépasse les 30 secondes.

Voici ma boucle pour lire les données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 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);
    echo $DDATE;echo ' ';
    echo $SYSCAA;echo ' ';
    echo $GPS;echo ' ';
    echo $SGTQS;echo ' ';
    echo $NUMES;echo ' ';
    echo $NBR;echo ' ';
    echo "<br>";
}
Voici ma boule pour copier mes donnees:
Code :
1
2
3
4
5
6
7
8
9
10
 while (ocifetch($lala)){
    $date=ociresult($lala,1);
    $syscaa=ociresult($lala,2);
    $gps=ociresult($lala,3);
    $sgtqs=ociresult($lala,4);
    $numes=ociresult($lala,5);
    $nbr=ociresult($lala,6);
    $sql="insert INTO historique (DDATE,SYSCAA,GPS,SGTQS,NUMES,NBR) VALUES ('$date','$syscaa','$gps','$sgtqs','$numes','$nbr')";
    $res = mysql_query($sql) or die ("requete incorrecte au niveau des statistiques du jour");
}
Merci d'avance
johnkro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 11h29   #2
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
tu prends des données oracle que tu copies dans une base SQL ? sympa...

sinon, si c'est vraiment ça le problème, c'est set_time_limit() la fonction.

Tu mets juste le nombre de secondes que tu veux en argument... Si c'est pas toi qui administre le serveur, il est fort possible que le responsable bloque cette fonction, auquel cas il faudra le contacter...

Pour connaître ta limite de temps actuelle, tu affiches le retour de ini_get('max_execution_time')
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h26   #3
Membre habitué
 
Avatar de johnkro
 
Étudiant
Inscription : juin 2006
Messages : 276
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 276
Points : 146
Points : 146
Envoyer un message via MSN à johnkro
en ajoutant set_time_limit(60); avnt ma boucle ou dedans, ca ne fonctionne, il me dit que la fonction n'est pas reconnu...
c'est sympa d'oracle a sql ms c chiant lol
johnkro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h54   #4
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
tu peux mettre le message d'erreur svp ?
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h56   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
si tu n'est pas administrateur, y a de forte chances pour la fonction set_time_limit() ait été désactivée... donc normal qu'il ne la reconnaisse pas, donc ce n'est pas une bonne solution.

Essaye de revoir ton algorithme pour le découper en "morceaux" executables l'un apres l'autre par exemple, a l'aide de header("Location: ..."); ou de liens cliquables... ou encore ameliore ton code pour augmenter ses performances et le terminer dans les 30 sacro saintes secondes ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 09h10   #6
Membre habitué
 
Avatar de johnkro
 
Étudiant
Inscription : juin 2006
Messages : 276
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 276
Points : 146
Points : 146
Envoyer un message via MSN à johnkro
Je ne vois pas comment je pourrais améliorer mon code pour le rendre plus rapide, car je dois forcément faire un INSERT dans ma base localMySQL de mes données venant de Oracle... arf arf
johnkro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 09h49   #7
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
tu fermes bien ta connexion oracle avant de lancer celle de mysql ? (je sais pas si ça a un rapport mais peut être)
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 10h06   #8
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
ce n'est certainement pas UN insert qui prend 30 secondes. et meme si c'est le cas, tu peux essayer d'ajouter DELAYED, ou encore ajouter/enlever des clés pour optimiser la requete.

Si tu as plusieurs INSERT, c'est donc que ton traitement est découpable en portion pouvant etre executées en plusieurs fois (avec un lien "Cliquez pour continuer") ce qui est envisageable si c'est pour une interface administrateur uniquement, balance pas ce genre de script a l'utilisateur lambda ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 10h04   #9
Membre habitué
 
Avatar de johnkro
 
Étudiant
Inscription : juin 2006
Messages : 276
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 276
Points : 146
Points : 146
Envoyer un message via MSN à johnkro
Je ne peux pas fermer la connexion Oracle, car je lis les données sur le serveur Oracle pour les copier sur mon serveur MySQL local...

La solution serait une requête imbriquée du genre "INSERT (dans ma base local MySQL) VALUES (SELECT(les donnees du serveur Oracle))", mais bon ça serait tro facile, je suis sous PHP4, donc Good Bye les requêtes imbriquées.

Je ne peux pas non plus mettre de lien pour cliquer pour continuer le telechargement, ca serait trop long...

Je ne sais plus comment faire tssss
johnkro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 10h30   #10
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Citation:
Envoyé par johnkro
Je ne peux pas non plus mettre de lien pour cliquer pour continuer le telechargement, ca serait trop long...
Qu'est-ce qui serait trop long ?

Si c'est le temps passé a coder, faut savoir ce que tu veux...
Si c'est le nombre de fois a cliquer sur "suivant", ce nombre correspond au temps qu'il te faut pour charger toute ta base divisé par 30 secondes environ (mettons 25 pour plus de prudence)

Je te dit pas de faire une page "suivant" par requete INSERT, mais de benchmarker ton algo et de mettre un lien "suivant" si tu t'approche trop de la limite des 30 secondes. Il me semblais qu'un script de ce genre avait été fait pour dumper une base par Yogui dans le sujet "Vos Meilleurs Codes Sources", mais je n'arrive pas a le retrouver. Ca ne correspondait pas exactement a ce que tu cherches, mais ca fonctionnait de la meme maniere, en verifiant qu'on ne s'approche pas trop de la limite des 30 secondes, puis en affichant un lien.

A noter que si tu as VRAIMENT la flemme d'appuyer sur suivant toute les 30 secondes, tu peux aussi generer non pas un lien suivant mais un script javascript qui va recharger la page (et tu n'a qu'a le laisser tourner)

Si tu veux pas de javascript, tu peux aussi faire un header("Location: ..."); vers la suite de la page, mais attention avec cette methode, les navigateurs sont limités dans le nombre maximum autorisées de redirection (il me semble que c'est 30 pour IE) mais rien ne t'empeche d'afficher un lien (ou du javascript) a la 29ieme redirection.

Tout ca pour dire que je ne vois pas ce qui est "trop long" ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h37.


 
 
 
 
Partenaires

Hébergement Web