time-out en php
22 messages
• Page 1 sur 2 • 1, 2
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
time-out en php
Bonjour,
j'ai un script php qui dure très longtemps car il traite plus de 40.000 lignes d'un fichier XML et intègre dans mysql des produits (tout en redimensionnant des images).
il tourne donc plus de 30s.
j'ai ce message d'erreur :
Fatal error: Maximum execution time of 30 seconds exceeded in ...
j'ai essayé set_time_limit(0); mais je n'ai pas accès à cette fonction en safe-mode.
j'ai également essayé ini_set('max_execution_time',100); mais cela semble ne rien y faire car la limite reste à 30s....
quelqu'un a-t-il une idée ?
Merci
j'ai un script php qui dure très longtemps car il traite plus de 40.000 lignes d'un fichier XML et intègre dans mysql des produits (tout en redimensionnant des images).
il tourne donc plus de 30s.
j'ai ce message d'erreur :
Fatal error: Maximum execution time of 30 seconds exceeded in ...
j'ai essayé set_time_limit(0); mais je n'ai pas accès à cette fonction en safe-mode.
j'ai également essayé ini_set('max_execution_time',100); mais cela semble ne rien y faire car la limite reste à 30s....
quelqu'un a-t-il une idée ?
Merci
- applebuelos
- Nouveau WRInaute

- Messages: 1
- Inscription: 15 Aoû 2006
ou au debut de ton fichier .php :
tu ecris : set_time_limite('duree de l execution de ton script en secondes');
tu ecris : set_time_limite('duree de l execution de ton script en secondes');
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
applebuelos a écrit:ou au debut de ton fichier .php :
tu ecris : set_time_limite('duree de l execution de ton script en secondes');
comme je le disais dans mon post précédent, j'obtiens un message d'erreur lorsque je fais cela me disant que je ne peut pas modifier ce paramètre en safe-mode...
-

arnaudmn - WRInaute passionné

- Messages: 1543
- Inscription: 11 Mai 2005
JeromeRookie a écrit:comme je le disais dans mon post précédent, j'obtiens un message d'erreur lorsque je fais cela me disant que je ne peut pas modifier ce paramètre en safe-mode...
Voir les explications dans http://www.php.net/set_time_limit :
"Notez que set_time_limit() n'a pas d'effet lorsque PHP fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini."
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
j'ai accès à mon root et essaie de modifier mon fichier php.ini.
j'ai deux fichiers php.ini, l'un dans etc/php5/cli/, l'autre dans etc/php5/apache/
savez vous lequel doit etre modifié ?
j'ai modifié les deux avec une fois max_execution_time=35 et une autre fois max_execution_time=40, afin de le savoir mais lorsque je relance mon script, j'ai toutjours un time-out après 30s????
faut-il redémarrer le serveur apache pour que cette modif soit prise en compte ?
si oui comment faire ?
j'ai deux fichiers php.ini, l'un dans etc/php5/cli/, l'autre dans etc/php5/apache/
savez vous lequel doit etre modifié ?
j'ai modifié les deux avec une fois max_execution_time=35 et une autre fois max_execution_time=40, afin de le savoir mais lorsque je relance mon script, j'ai toutjours un time-out après 30s????
faut-il redémarrer le serveur apache pour que cette modif soit prise en compte ?
si oui comment faire ?
-

arnaudmn - WRInaute passionné

- Messages: 1543
- Inscription: 11 Mai 2005
Voir http://php.developpez.com/faq/?page=ini (j'ai bien le droit de faire un lien ?)
Pour redémarrer apache : /etc/init.d/apache restart
Pour redémarrer apache : /etc/init.d/apache restart
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
merci pour ces explications.
j'ai donc pu isoler mon fichier php.ini et tester les deux pistes pour résoudre mon problème :
piste 1 : set_time_limit(0);
cette commande donne une erreur (Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in...) alors que j'ai safe_mode = Off dans mon php.ini
Piste 2 : modifier max_execution_time = 200 dans php.ini
j'ai toujours l'erreur Fatal error: Maximum execution time of 30 seconds exceeded in ...
ce qui est étonnant, c'est que l'erreur affiche toujours 30s ...
j'ai donc pu isoler mon fichier php.ini et tester les deux pistes pour résoudre mon problème :
piste 1 : set_time_limit(0);
cette commande donne une erreur (Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in...) alors que j'ai safe_mode = Off dans mon php.ini
Piste 2 : modifier max_execution_time = 200 dans php.ini
j'ai toujours l'erreur Fatal error: Maximum execution time of 30 seconds exceeded in ...
ce qui est étonnant, c'est que l'erreur affiche toujours 30s ...
-

arnaudmn - WRInaute passionné

- Messages: 1543
- Inscription: 11 Mai 2005
En utilisant phpinfo() en php, ça doit te dire plein de chose : si tu es ou n'est pas en safe mode, la valeur de max_execution_time, l'emplacement du fichier ini, .... A vérifier pour voir s'il prend bien en compte ton fichier.
Il me semble pas qu'il faut faire autre chose que mettre safe mode à Off pour le désactiver .... mais j'y ai jamais touché. Idem pour la durée d'execution : c'est quand même une sécurité d'avoir une limitation du temps, donc je laisse
Quand j'ai des scripts de plus de 30 secondes, je les coupes en morceau ; tu dois pouvoir le faire en comptant le temps au fur et a mesure du traitement de ton fichier, et quand tu vas atteindre les 30 secondes, tu mémorise ou tu en ai ... et tu recommence.
Il me semble pas qu'il faut faire autre chose que mettre safe mode à Off pour le désactiver .... mais j'y ai jamais touché. Idem pour la durée d'execution : c'est quand même une sécurité d'avoir une limitation du temps, donc je laisse
Quand j'ai des scripts de plus de 30 secondes, je les coupes en morceau ; tu dois pouvoir le faire en comptant le temps au fur et a mesure du traitement de ton fichier, et quand tu vas atteindre les 30 secondes, tu mémorise ou tu en ai ... et tu recommence.
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
là, il faudrait vraiment que je le coupe en 100 car il y en a pour 30minutes environ ...
j'ai refais un phpinfo et je trouve que le safe_mode est à On pour la local value et à Off pour la master value
j'ai refais un phpinfo et je trouve que le safe_mode est à On pour la local value et à Off pour la master value
-

cthierry - WRInaute passionné

- Messages: 2466
- Inscription: 15 Jan 2005
+ 1 avec arnaudmn
Pourquoi ne pas tout simplement decouper ton script php en plusieurs étapes.
C'est ce que je fais pour récupérer des gros flux et les mettres en bdd. Cela évite ce genre de problème.
Mais bon c'est juste un avis.
Pourquoi ne pas tout simplement decouper ton script php en plusieurs étapes.
C'est ce que je fais pour récupérer des gros flux et les mettres en bdd. Cela évite ce genre de problème.
Mais bon c'est juste un avis.
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
votre avis m'intéresse mais je ne vois pas un moyen simple de le faire. j'intègre un catalogue xml d'une plateforme d'affiliation. ce catlogue est énorme il faudrait que je le découpe en 50...
faire cela à la main me parait un peu laborieux... mais peut-etre me manque-t-il des compétences...
faire cela à la main me parait un peu laborieux... mais peut-etre me manque-t-il des compétences...
-

arnaudmn - WRInaute passionné

- Messages: 1543
- Inscription: 11 Mai 2005
JeromeRookie a écrit:votre avis m'intéresse mais je ne vois pas un moyen simple de le faire. j'intègre un catalogue xml d'une plateforme d'affiliation. ce catlogue est énorme il faudrait que je le découpe en 50...
faire cela à la main me parait un peu laborieux...
On ne parle pas de le faire a la main
En générant du javascript ou l'entete Refresh par exemple quand la limite des 30 secondes va être atteinte ... ou en mettant un lien pour continuer le traitement.
- JeromeRookie
- WRInaute occasionnel

- Messages: 462
- Inscription: 11 Aoû 2003
oulah... là ca dépasse mes compétences... j'ai bien compris le principe que tu expliques.
je sais mesurer le temps et enclencher une action dès que les 25s sont dépassées mais je ne sais pas :
- utiliser ftell
- rappeler la meme page sans qu'il y ait un clic
- commencer dans le fichier xml là ou je m'étais arreté...
as-tu par hasard un exemple de fichier ?
je sais mesurer le temps et enclencher une action dès que les 25s sont dépassées mais je ne sais pas :
- utiliser ftell
- rappeler la meme page sans qu'il y ait un clic
- commencer dans le fichier xml là ou je m'étais arreté...
as-tu par hasard un exemple de fichier ?
-

arnaudmn - WRInaute passionné

- Messages: 1543
- Inscription: 11 Mai 2005
JeromeRookie a écrit:oulah... là ca dépasse mes compétences... j'ai bien compris le principe que tu expliques.
je sais mesurer le temps et enclencher une action dès que les 25s sont dépassées mais je ne sais pas :
- utiliser ftell
http://www.manuelphp.com/php/function.ftell.php
JeromeRookie a écrit:- rappeler la meme page sans qu'il y ait un clic
Quand tu atteind 25 secondes, tu fais ça :
$iPositionDansLeFichier = ftell($tonfichier);
$url='http://mondomaine.com/';
header("Refresh: 1;url=http://tondomaine/tapage?position=".$iPositionDansLeFichier);
JeromeRookie a écrit:- commencer dans le fichier xml là ou je m'étais arreté...
Juste après avoir ouvert ton fichier (avec fopen ?), tu te positionnes avec fseek($tonfichier, $HTTP_GET_VARS["position"])
Maintenant, je sens que tu vas me dire que tu utilises un script tout fait pour traiter ton fichier xml ...
22 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
