pitidev Posté 9 Mai 2004 Posté 9 Mai 2004 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 !
Dash Posté 9 Mai 2004 Posté 9 Mai 2004 (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é 9 Mai 2004 par Dash
Anonymus Posté 10 Mai 2004 Posté 10 Mai 2004 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.
pitidev Posté 10 Mai 2004 Auteur Posté 10 Mai 2004 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 Posté 10 Mai 2004 Posté 10 Mai 2004 (modifié) Attention ! 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 Modifié 10 Mai 2004 par Americas
pitidev Posté 10 Mai 2004 Auteur Posté 10 Mai 2004 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?
pitidev Posté 10 Mai 2004 Auteur Posté 10 Mai 2004 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() ...
Anonymus Posté 10 Mai 2004 Posté 10 Mai 2004 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 bien utile, pour un moteur de recherche. A+, Anonymus.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant