Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2008-12-10 10:36:04

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Problème du timeout php

Bonjour

J'essaie de lancer une requête dans mon plugin de reprise des commentaires gallery mais évidemment je tombe en timeout php pendant mes requêtes mysql.

J'ai essayé de décomposer par un appel intermédiaire  mais je n'arrive toujours pas à passer outre ce timeout (en gros, j'ai voulu vérifier que le timeout n'était pas lié à MySQL ;-) !! Actuellement, je suis bloqué entre 800 et 900 enregistrements.

dcRepriseCom::updateMedia_table_tmp_step($comm_offset,$comm_limit)

Pour contourner ce problème, est-ce qu'il existe une méthode fournie par dotclear (et son équipe) ou faut-il que je me tourne vers le XMLHttp ? (bon, j'ai déjà commencé à regarder mais ce n'est pas simple pour le moment (enfin pour moi !!) de l'interfacer avec dotclear !)

Si quelqu'un a une idée ?!!

Merci d'avance

Hors ligne

#2 2008-12-10 11:13:12

Dzana
Membre
Inscription : 2007-07-22
Site Web

Re : Problème du timeout php

Bonjour,
Il faudrait voir comment est faite ta requête mysql : peut-être n'est-elle pas optimisée ?

Hors ligne

#3 2008-12-10 14:12:31

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

en fait, mon problème vient surtout d'un cumul des requêtes dans ma fonction ce qui fait que j'arrive à force au timeout php ...

par contre, j'ai une requête qui me pose problème (enfin j'essaie de faire autrement mais pour le moment, je ne vois pas !!)

		$strReq = 'SELECT media_id, media_file from '.$this->media_table_tmp.' ';
		$rs = $this->con->select($strReq);
		///*
		while ($rs->fetch())
		{
			$query = 'UPDATE '.$this->media_table_tmp.' '.
				'SET media_file = \''.basename($rs->media_file).'\' '.
				'WHERE media_id = '.(integer) $rs->media_id .' ';
			
			$this->con->execute(
				$query
			);

Hors ligne

#4 2008-12-10 14:18:58

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Problème du timeout php

Dans l'idée, pour faire simple je pense qu'il faudrait ajouter un flag temporaire  dans ta table indiquant si une ligne a été traitée, et gérer les updates par lot.
Exemple :

		$strReq = 'SELECT media_id, media_file from '.$this->media_table_tmp.' WHERE processed=0';
		$rs = $this->con->select($strReq);
		///*
		$count=0;
		while ($rs->fetch() && ($count++) < 50)
		{
			$query = 'UPDATE '.$this->media_table_tmp.' '.
				'SET media_file = \''.basename($rs->media_file).'\', '.
				'processed=1 '.
				'WHERE media_id = '.(integer) $rs->media_id .' ';
			
			$this->con->execute(
				$query
			);

puis faire recharger la page tant qu'il reste des résultats...


Dyslexics have more fnu!

Hors ligne

#5 2008-12-10 15:22:36

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

Dsls a écrit :

puis faire recharger la page tant qu'il reste des résultats...

J'ai bien cerné le système de traitement par lot mais comment tu fais pour recharger la page entre chaque passage ?

Hors ligne

#6 2008-12-10 15:25:41

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Problème du timeout php

Le plus simple est de ne rien afficher du tout, et de balancer un http::redirect("url de la page");exit; lorsqu'il reste des traitements à faire.

Autre solution, plus complexe : enregistrer un service REST dans l'administration, et l'appeler en Ajax dans la page.


Dyslexics have more fnu!

Hors ligne

#7 2008-12-10 15:31:34

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

ok je vais voir ça !

Merci ;-)

Hors ligne

#8 2008-12-10 23:42:33

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

Bonsoir

Est-ce qu'il y a possibilité de passer l'offset via l'URL ?

par exemple :

http::redirect($this->url.'&action=createreprisecom&offset='.$comm_offset.'');

Avec la possibilité de récupérer la valeur de comm_offset
Si je pose la question, c'est qu'il me sort cette page d'erreur sous firefox : "Boucle de redirection" ... ça doit bloquer avec l'authentification ou un truc comme ça ?

Hors ligne

#9 2008-12-11 06:56:10

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Problème du timeout php

Hmmm ... je me demande si firefox n'abandonne pas lorsqu'il a reçu n redirect successifs, j'avais oublié ce détail...

Il te reste l'alternative ajax :
* Enregistre un service via $core->rest->addFunction (pour la signature et le contenu, tu peux regarder _admin.php du plugin gallery)
* Dans le js de ta page, il faut mettre un code de ce genre :

$.post("services.php",{f:"service",param1:"val1",param2:"val2, callback});

Dyslexics have more fnu!

Hors ligne

#10 2008-12-11 09:01:03

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

ok c'est bien ça ... abandon au bout d'un certain nombre de redirect ! (testé avec log dans une table)

Je vais donc utiliser l'alternative :-)) ou du moins essayer !!

Hors ligne

#11 2008-12-11 09:19:12

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Problème du timeout php

Ce que je verrais, dans le concept :
* Le service REST renvoit le nombre de lignes traitées
* Le callback javascript réitère la requête $.post, tant que le nombre renvoyé n'est pas nul et qu'il n'y a pas d'erreur


Dyslexics have more fnu!

Hors ligne

#12 2008-12-11 18:22:03

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : Problème du timeout php

kwon a écrit :

Si je pose la question, c'est qu'il me sort cette page d'erreur sous firefox : "Boucle de redirection" ... ça doit bloquer avec l'authentification ou un truc comme ça ?

C'est pareil si tu dis à PHP d'attendre quelques secondes avant de faire une redirection ?

Hors ligne

#13 2008-12-12 07:40:29

kwon
Membre
Lieu : Bordeaux
Inscription : 2006-08-05
Site Web

Re : Problème du timeout php

Bonjour

Donc j'ai mis un sleep(5) avant la redirection mais ça ne semble pas corriger le problème du nombre de rechargement. Firefox s'énerve au bout de 20 rechargements ... et en même temps, ça parait normal lol
Bon en voyant ça, je me suis dit que je devais louper un petit truc pour arriver à 20 rechargements. Déjà, j'ai augmenter mon nombre d'éléments par boucle mais en plus, j'avais une petite boucle sans fin au milieu ... argggg

J'ai donc un peu corrigé mon code sur ma première partie avec un offset  et ça fonctionne ! c'est déjà ça ;-)

Merci à vous

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map