|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
JeromeRookie WRInaute impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 10:06 Sujet du message: 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 |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 13:11 Sujet du message: time-out en php |
|
|
Dans le fichier php.ini, tu as une ligne :
max_execution_time = 30
Par contre, si tu es en mutualisé, je pense pas (et même j'espère) que tu ne peux pas changer ce parametre. |
|
| |
|
 |
applebuelos Nouveau WRInaute
Inscrit le: 15 Aoû 2006 Messages: 1
|
Posté le : Dim Nov 18, 2007 13:18 Sujet du message: time-out en php |
|
|
ou au debut de ton fichier .php :
tu ecris : set_time_limite('duree de l execution de ton script en secondes'); |
|
| |
|
 |
JeromeRookie WRInaute impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 13:23 Sujet du message: time-out en php |
|
|
| 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 accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 13:27 Sujet du message: time-out en php |
|
|
| 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 impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 13:33 Sujet du message: time-out en php |
|
|
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 ? |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 13:43 Sujet du message: time-out en php |
|
|
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 |
|
| |
|
 |
JeromeRookie WRInaute impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 13:56 Sujet du message: time-out en php |
|
|
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 ... |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 14:08 Sujet du message: time-out en php |
|
|
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. |
|
| |
|
 |
JeromeRookie WRInaute impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 14:12 Sujet du message: time-out en php |
|
|
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 |
|
| |
|
 |
cthierry WRInaute accro

Inscrit le: 15 Jan 2005 Messages: 1765 Localisation: seine et marne
|
Posté le : Dim Nov 18, 2007 14:14 Sujet du message: time-out en php |
|
|
+ 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. |
|
| |
|
 |
JeromeRookie WRInaute impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 14:17 Sujet du message: time-out en php |
|
|
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... |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 14:50 Sujet du message: time-out en php |
|
|
| 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 Suffit de traiter ton fichier comme tu le fais aujourd'hui, mais en regardant le temps écoulé. Quand tu vas atteindre 30 secondes, tu recharges ta page avec un paramétre qui t'indique ou tu en es (simplement la position dans le fichier, avec ftell() ), et tu recommences depuis cette position.
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 impliqué

Inscrit le: 11 Aoû 2003 Messages: 333
|
Posté le : Dim Nov 18, 2007 15:20 Sujet du message: time-out en php |
|
|
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 ? |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1432
|
Posté le : Dim Nov 18, 2007 15:28 Sujet du message: time-out en php |
|
|
| 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 ...  |
|
| |
|
 |
| |
|
|