Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Pages : 1
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
Bonjour,
Il faudrait voir comment est faite ta requête mysql : peut-être n'est-elle pas optimisée ?
Hors ligne
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
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
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
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
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
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
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 ?
- les règles du forum : http://forum.dotclear.net/viewtopic.php?id=39494
- la galaxie de Dotclear 2 : http://fr.dotclear.org/documentation/2.0/links
Hors ligne
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
Pages : 1
Vous n'êtes pas identifié(e).