Version complète: sur le forum Webmaster Hub : moteur de recherche
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
pitidev
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 traffic 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 !
Dash
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 wink.gif

Grossierement, voici le principe :
CODE
$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 smile.gif
Anonymus
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 :
CODE
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 :
CODE
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 :
CODE
max_execution_time(86400);

qu'il faudra employer.

Voilà,
Anonymus.
pitidev
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.
Americas
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.gif
pitidev
voila les infos que phpinfo() me donne :
CITATION
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?
pitidev
CODE
set_time_limit(60);

pas eu d'erreur

CODE
set_time_limit(86400);

pas eu d'erreur

CODE
max_execution_time(86400);

Fatal error: Call to undefined function: max_execution_time() ...
Anonymus
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é) :

CODE
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 biggrin.gif bien utile, pour un moteur de recherche.

A+,
Anonymus.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.