|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() |
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 :
Code :
|
||||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : janvier 2006 Messages : 140 ![]() |
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') |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : janvier 2006 Messages : 140 ![]() |
tu peux mettre le message d'erreur svp ?
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
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/ |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() |
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
|
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : janvier 2006 Messages : 140 ![]() |
tu fermes bien ta connexion oracle avant de lancer celle de mysql ? (je sais pas si ça a un rapport mais peut être)
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
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/ |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() |
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 |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Citation:
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/ |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com