Aller au contenu

Sujets conseillés

Posté

Bonjour

je voudrais faire un moteur de recherche qui permettrait de recherche un mot ou une expression dans tous les archives de ma liste de discussion.

Je voudrais savoir si je dois passer par mysql pour indexer mes message ou si je fait un moteur qui scrute toutes les pages d'archives.

J'ai environ un trafic de 1000 messages par mois... on en est a 40000 messages depassé sans probleme.

j'ai peur que mon futur script tombe en timeout

alors? une recherche SQL dans une base parmi 40000 enregistrement est plus rapide que de parcourir 40000 pages html?

PS : rien que dire 40000 pages html ... je suis quasi sur de tomber en time-out !

Posté (modifié)

bonjour,

Je vous conseille une troisieme voie : certains scripts sont concus pour eviter les timeout. Par exemple des scripts de backup de base de donnees. Vous devriez probablement chercher de ce cote ;)

Grossierement, voici le principe :

$max_execution_time = function_exists('ini_get') ? _AT_ini_get('max_execution_time') : _AT_get_cfg_var('max_execution_time');
if (max_execution_time <= 0)
{
max_execution_time = 15; //15 secondes
}

...

$time=time();

do
{
...
if (time()-$time >= $max_execution_time )
{
 @header('location : $url?id=$id_suivant');
 exit();
}
...
}
while (...)
...

Des qu'un timeout doit se produire, vous interrompez le script et le relancez avec des parametres adaptes. Au besoin sauvegardez les donnees intermediaires, dans une base de donnees, un fichier quelconque, Voire une session.

Cette solution peut bien-sur etre combinee avec une recherche SQL ou via fichiers HTML.

A priori, entre SQL ou fichier, tout depend de la construction de vos tables, de la construction de vos requetes, de la configuration de votre serveur SQL, de la vitesse de votre serveur de fichier, du nombre d'appel simultanes a votre db et/ou fichiers, etc.

N'oubliez pas que vous etes probablement limite en nombre de connexions simultanees a votre base de donnees.

N'oubliez pas non plus le probleme de conccurence sur les fichiers.

Quoi que vous decidiez, veillez a optimiser un maximum vos traitements :)

Modifié par Dash
Posté

Pour dire à un script ( et au navigateur ) de ne pas s'arreter au bout de 30 secondes, il faut lui donner un temps maximum d'execution, en secondes.

Ainsi :

set_time_limit(60);

fera en sorte que le script ne s'arrète qu'au bout de 60 secondes. Ainsi, on peut demander au programme de tourner pendant 1 journée :

set_time_limit(86400);

Mais on peut aussi demander au fichier de configuration php.ini de le faire. Dans ce cas, c'est la fonction :

max_execution_time(86400);

qu'il faudra employer.

Voilà,

Anonymus.

Posté

ok je vois. vous repoussez les limites du temps d'attente autorisé, je le note !

est ce que vous avez des liens qui parlerait de ce qui faut faire ou de ce qu'il ne faut pas faire pour optimiser le temps de traitement?

avant de commencer a faire l'algo ou a creer l'architecture, je voudrais eviter de tomber dans les pieges du débutant.

Posté (modifié)

Attention ! :yoot:

Je ne sais pas trop si je me trompe... mais je crois que certains hébergeurs comme OVH limitent le temps maximal d'un requête et envoie un message d'alerte si celle-ci dépasse les 60 secondes.

Si le problème se représente plusieurs fois ils bloquent complètement le script :wacko:

Modifié par Americas
Posté

voila les infos que phpinfo() me donne :

max_execution_time 30

max_input_time 60

memory_limit 16M

si j'ai bien compris, le premiere ligne, c'est le temps limite de mon script.

la deuxieme, c'est le temps max que je peux parametrer et la 3e... c'est la taille de quoi?

Posté

set_time_limit(60);

pas eu d'erreur

set_time_limit(86400);

pas eu d'erreur

max_execution_time(86400);

Fatal error: Call to undefined function: max_execution_time() ...

Posté

Pour ce qui est des restrictions des hebergeurs, il n'y en a aucune, venant de amen ou de ovh.

Pour ce qui est de :

max_execution_time

c'est une option de configuration. Donc, on ne change pas la valeur dans le code, mais dans le fichier php.ini, auquel on a accès seulement en local, ou sur un dédié.

Pour ce qui est du temps d'execution max. que l'on peut changer dans le code, c'est la fonction :

set_time_limit($temps_en_secondes);

que l'on parametre en indiquant le temps maximum.

Pour l'essayer, tu peux faire (non testé) :

set_time_limit(86400);
for ($a=0;$a<100;$a++){
sleep(5);
echo "<br>".$a;
 }

Ce qui aura pour effet d'ecrire la valeur de $a, toutes les 5 secondes...

Eh oui, sleep permet de retarder l'execution d'un script :D bien utile, pour un moteur de recherche.

A+,

Anonymus.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...