OVH et page statique Recherche

Yop

Comme promis, j'ai trouvé un peu de temps pour m'occuper du problème au niveau du serveur.

Donc, avec la page sans modif de ce topic : http://forum.pluxml.org/viewtopic.php?id=1062

Erreur 500 du serveur qui renvoit ça :
[host www.customtaro.fr] Premature end of script headers: index.php, referer: http://www.customtaro.fr/blog/?static2/rechercher

Sur la recherche "test".

Je ne sais pas si ca va faire avancer les choses mais bon, je communique la chose.; )

Merci de me dire comment ça se présente.

TCho, Hamtaro.

Réponses

  • décembre 2008 modifié
    bonjour,

    je viens juste de tester avec le terme : fauteuil , ça passe .

    Au vu du nombre vraiment important d'article , je te propose de decommenter la ligne :
    if (preg_match('#(?:\w+\W+){100}\w+#s' , $content , $limite)) {$content =$limite[0];}
    
    (enleve les 2 // qui se trouverait devant ) ou refait un copier/coller du code proposer dans le topic que tu cite (je l'ai decommenté).

    Si cela ne suffit toujours pas , peut tu me faire parvenir un zip de tes articles , que je puissent les tester en lignes (dans un repertoire temporaire qui ne sera pâs referencer) dans les mêmes conditions que toi (serveur kimsufi de chez OVH)

    Je vais tenter de voir si une config réduite peut le faire , au pire , j'ajouterais la possibilité d'activé ou non les résumé pour les blogs 'Importants' (en auto ou manuel).

    GC

    P.S. je repasse probablement aujourd'hui :)

    <edit>Le mots articles renvoi 52 résultats , la pagination sur les pages 2 et 3 plante , la quatre avec seulement 6 articles(daté de 2007) retourné s'affiche ..
    http://www.customtaro.fr/blog/?static2/rechercher&search=articles&page=4
    On reglant , le nombre de résultat retourné par page , il est probablement possible aussi de limité les ressources mémoires utilisée , par contre , vu le nombre d'article ça mouline aussi forcément .

    Des options ou reglages plus fins seront probablement necessaires .


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Bizarre, chez moi, "fauteuil" plante avec les deux codes...

    J'ai essayé avec "rikiki" sur les deux codes : idem

    Idem pour ton lien avec la recherche "articles". Cela doit dépendre surement de l'heure d'exécution de la recherche.

    J'ai décommenté la ligne et changé le nombre d'articles par page à 8. J'ai fait une recherche avec "articles" : idem, erreur 500...

    Tcho, Hamtaro.
  • En effet ,
    16heures 12 et fauteuil est trouvé a nouveau (2 articles)
    16 heures 15 = bug
    16heures 17 re okay

    etc ... plus souvent bug que bon !

    peut tu tester le moteur sans afficher de résumé :
    en remplaçant :
    #création du résume , appel de la methode getresume() 
    					content=$this->getresume($content,$word);
    
    par
    #création du résume , appel de la methode getresume() 
    					$content='Par '.$this->art['author'];//$content=$this->getresume($content,$word);
    
    Plutôt que de rien affiché pour le test , on affiche l'auteur de l'article.
    Cela me permettra eventuellement de voir si ça sature simplement a cause du résumé ou de la quantité des fichiers et de leur contenus à parcourir.
    (etonnant que free soit plus performant sur ce coup la , en général , leurs serveurs rament assez facilement )
    .
    tiens nous au courant

    ++


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Toujours du souci...

    Marche pas en ne faisant que la dernière modif sur la dernière fonction recherche. Je vais tout basculer sur Free d'ici là et faire les test en parallèles pour voir si ca ne vient pas d'ailleurs.

    TCho, Hamtaro.
  • hmm , ça a l'air pire , meme ta page d'acceuil semble longue a charger
    heure de pointe ? d'où moins de ressources mémoire ou moins de requêtes possibles ? ...

    Y-a-t-il un pilote OVH dans le forum ?

    Ceci dit tu ne peut vraiment pas me fournir momentanément un zip de tes ficires xml , des 589 articles ? .... que je teste et voit comment cela réagit sur un serveur OVH (kimsuffi) ... je ne vais pas generer 600 fichiers lorem ipsum juste pour tester :)

    pluche pluche


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Je t'ai envoyé par mail l'adresse pour récupérer mon contenu.

    En espérant que tu puisses trouver une solution rapidement. ^^

    TCho, Hamtaro.
  • décembre 2008 modifié
    bonjour,

    j'ai trouvé ton mail dans les indésirables , c'est bon j'ai récuperer le zip.

    premiers test en local , sur une recherche de la lettre A avec la premiere version = erreur , manque de memeoire

    version paginé , ça mouline , mis c'est bon

    enfin en testant sur certaines années uniquement et en "muselant" au 200 premiers mots de chaque article , le traitement est beaucoup plus rapide .
    On tiens le bon bout :)

    Reste donc a construire le moteur de façon a ce qu'il fasse une recherche sur la derniere années ou les 3 derniers mois par défaut en proposant des cases a coché pour plus ou d'autre periodes .

    Je vais m'orienté donc vers un moteur de recherche style 'mode avançée' , d'abord par "périodes" (ce qui pourra servir aussi a faire une liste de type 'archive' ),
    ensuite je verrai ce que ça donne avec des conditions (| , & , !) si ça ne bouffe pas trop de ressource .
    je verrai ça l'année prochaine , la pour moi c'est 'préparation , cuisine et surement un levé tard le premier ! ....
    je vois ça dés le 2 si tout va bien .

    En attendant je te propose de limité tes recherches au 100 derniers articles peut-être ?
    ou te servir de mon fichier test (tri par année ajouter)
    <?php
    # On démarre la session
    session_start();
    /**
     * Classe plxSearch Recherche avancée avec résumé et pagination
     * @Pages statiques Pluxml beta 4
     * @extends plxMotor
     * @author    Griboval Cyril
     * @BETA
     **/
    class plxSearch extends plxMotor {
    
    function plxSearch($filename) {
    parent::plxMotor($filename);
    # repertoire ou sont stocké les articles
    $plxGlob_arts = & new plxGlob(PLX_ROOT.$this->aConf['racine_articles']);
    # masque de nom de fichier correspondant a un article publié
    //$this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
    if (!empty($_GET['year'])){$this->year=$_GET['year'];}
    else {$this->year ='('. date("y") .') | (09) ';}
    $this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{2}['.$this->year.']{2}[0-9]{8}.[a-z0-9-]+.xml$/';
    
    #extraction de touts les noms d'articles
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    #nettoyage et recupération de l'url de base
    $this->sUrl = $this->getsurl();
    }
    
    	/**
    	 * Méthode qui retourne l'url de base de la page statique
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
    		function getsUrl() {
    			// decoupage de l'url  
    				$geturl = explode("?", $_SERVER['REQUEST_URI']);
    				/*initialisation  de la variable reconstruisant l'url */
    				$redourl='';
    				
    			// recuperation des valeurs $_GET uniquement ( aprés le '?' )
    				for($i=1;$i < count($geturl);$i++) 
    					{
    						$redourl .=$geturl[$i];
    				    }
    			
    			// découpage des valeur $_GET (si '&' présent , se trouve dés la seconde clé du tableau )
    				$topurl = explode("&", $redourl);	
    			
    			// on ne garde que la premiere valeur
    				$finalurl = '?'.$topurl[0];
    
    			// nettoyage des $_POST au passage ...
    				if (!empty($_POST)) {
    					plxUtils::unSlash($_POST);
    				}
    			
    			#renvoi de l'url de base
    				return $finalurl ;
    		}
    
    
    
    	/**
    	 * Méthode qui elague et fait un résumé des résultats de recherche
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
      function getresume($content,$word) {
     
    
    
    		#création du contexte du mot recherché (extraits page) 
    		#recherche de 0 à 50 caractéres avant et aprés le mot recherché
    			$masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s )?]{0,50}';
    
    			preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $content, $out);
    			
    		# on separe chaque extraits
    			foreach( $out[0] as $value ) {  $resume .= ' ... '.$value.' ';}
    
    			$resume=stripslashes($resume).' ... ';
    
    		# ce mot peut apparaitre plusieurs fois ! 
    		# (0-50 caractéres + mot recherché +0-50 caractéres ) X nb occurences = .... 
    		# on limite alors le résumé a une chaine qui ne contient qu'une trentaines d'espaces
    		
    			if (preg_match('#(?:\w+\W+){0,30}\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}	
    			
        	# Mise en evidence visuelle : engraissage et grossisement de l'occurence
    
    			$content=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);	
    
    		# renvoi du traitement 
    		
    			return $content;
    }  
    
    
    	/**
    	 * Méthode qui formatte les résultats de recherche
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
    function getsearch() {
    
    $totalResult=0;
    # variables de pagination
    $nbPerPage =15;
    $countResult = 1;
    $page=1;
    if ($_GET['page']) {
    $page = $_GET['page'];
    if (is_numeric($page)) {
    		$countResult = ($_GET['page']-1)*$nbPerPage+1;
    	}
    }
    $countEnd = $countResult + $nbPerPage - 1;
    		
            $i = 0;	
    
    	/* Recuperation et Nettoyage des mots recherché */  
            if(isset($_GET['search']))$word =$_GET['search'] ;
    				# on privilégie la requete $_POST
    		if(isset($_POST['search']))$word =$_POST['search'] ;
    		$this->word = $word;	
            $word = addslashes($word);
            $word = strtolower($word); 	
    		
    		# Si on a des fichiers
            if(is_array($this->aFiles)) { 
            $nbcfiles =count($this->aFiles);
            $nbccount = 0;
            $i = 1;
    	
    	/* on parcours tout nos fichiers , attention ça peut-etre long */        
    	while ($nbccount+1 <= $nbcfiles):
    	    $file2open = PLX_ROOT.$this->aConf['racine_articles'].$this->aFiles[$nbccount];
    	    $this->parseArticle($file2open);
    	    $this->art =$this->parseArticle($file2open);
    	    $nbccount++;
    	
        /* on extrait les titre chapo et content pour y rechercher notre chaine */ 
    	
                $content = $this->art['title'];
                $content .=' '.strip_tags( $this->art['chapo']).' ';
                $content .= strip_tags($this->art['content']);
                $content = addslashes($content);
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
    			
    	/* si le terme recherché existe dans cette article */
    			if($trouve!==0){ 
    		
    		# extraction des résultat pour la page affichée uniquement 
    		if($i >= $countResult && $i<= $countEnd ) 		
    			{
     # museliere pour les trés long articles on se limite aux 200 premiers mots
     if (preg_match('#(?:\W+\w+){0,199}\W+\w+#s' , $content , $limite)) {$content =$limite[0].' ';}
    
    				#création du résume , appel de la methode getresume() 
    					$content=$this->getresume($content,$word);
    					
    				#on alimente notre tableau 
    					$tableau[] = array($i,preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content,$this->art['date'],$trouve);
    				}
    			# comptage des résultats positifs	
                $i++;
    		
    			}
    
    			endwhile;
            }			
    
    		/* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<ul class="recherche">';
    		
    		# nombre total des articles trouvées 
    		if ($i ==-1) $i=0;
    		$totalResult = $i;
    		$this->total = $totalResult;
    		
    		
    		
    		#Mise en place de la barre de pagination 
    		$pagination = '<p class="recherchePagination"> Votre Recherche : <strong>'.$word.'</strong> . '.$this->total.' résultats .</p>';
    		// si total superieur au nb de resultat par page 
    		if ($this->total > $nbPerPage) {
    		$nbPage= ceil($this->total/$nbPerPage);
    		
    		// verification que la page demnadé existe 
    		if (($page > $nbPage) || ($nbPage ==NULL) ) header('location: '.$this->getsUrl().'&search='.$this->word);
    		$pagination = '<p class="recherchePagination"> Votre Recherche : <strong>'.$word.'</strong> . '.$this->total.' résultats  sur '.$nbPage.' Pages :</p><p class="recherchePagination"><b>Page n° </b> ';
    				
        for($numpage=1;$numpage <= $nbPage;$numpage++)
         {
    		if($numpage == $page) {
    		$pagination .= ' : <b>'.$numpage.'</b> ';
    		}
    		else {
               $pagination .= ' : <a href="'.$this->getsUrl().'&search='.$word.'&page='.$numpage.'">'.$numpage.'</a> ';
    		   }
         } 
    		 $pagination .= ' : .</p>
    		 ';
    
    		}
    		$search_results = $pagination.'<ul class="recherche">';		
    		
            
    		# compte les enregistrement gardés
    		$n=count($tableau);	
    		# tri inverse sur le tableau (article récents mis en avant )
    		if ($tableau)rsort($tableau);		
    		# puis on boucle dessus 	
            for($i=$n-1;$i >= 0;$i--) {
    			
    			
    		#creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '
    			<li>
    				<h3 class="rechercheTitle"><a href="?article'.$tableau[$i]['1'].'/'.$tableau[$i]['3'].'">'.$tableau[$i]['2'].' </a> </h3>
    				<p ><span class="rechercheNumero">('.$tableau[$i]['0'].')</span><span class="rechercheNb">  Terme trouvé '.$tableau[$i]['6'].' fois. </span>
    				<span class="rechercheShowDate"> Date : '.plxUtils::dateIsoToHum($tableau[$i]['5']).'</span>
    				</p>
    				<p class="rechercheResume">'.stripslashes($tableau[$i]['4']).'</p>
    				<p class="rechercheTargetBlank" >
    					<a href="?article'.$tableau[$i]['1'].'/'.$tableau[$i]['3'].'" onclick="window.open(this.href,\' _blank\');return false;" title="Oubrir dans une nouvelle page" style="font-weight:normal;font-style:italic";">( Ouvrir dans une nouvelle page  )</a> .</p>
    			</li>';
            }
    		/* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_results==$pagination.'<ul class="recherche">')  {$search_results = $pagination.' <p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p><p class="recherche"><b>La recherche a étè infructueuse </b>, il n\'y a rien qui corresponde à vos criteres .
             <br /> <b>Verifiez l\'orthographe ou changez les mots clés. </b></p>'; }
    		/* si notre variable de recherche a étè alimenté , on referme notre liste ordonnée */
             else {  
    		 $search_results .= '</ul><p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche </p>'.$pagination ;
    		
    		 
    		}
    		
            return $search_results;
        }
    
    }
    
    ?>
    <div id="content">
    		<div class="post">
    	
    	
    <?php
    		$search = new plxSearch((PLX_CONF));
    		$search->prechauffage();
    		$search->demarrage();
    if(!empty($_POST['search']) || !empty($_GET['search'])) {
    
    		$affichage =  $search->getsearch();
    
    echo $affichage;	
    
    	}
    		/* on affiche le formulaire */
             ?>
    
             <form method="post" action="<?php if($search) echo $search->getsUrl(); ?>">
              <fieldset><legend ><?php
    		  if ($search->word)  echo'  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
    		  else echo 'Faire une recherche .';
    		  ?></legend>
                <p><input name="search" size="15" maxlength=\"255\" value="<?php
    		    echo $search->word; 
    		  ?>" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
    		  
            </form> 
    		<p>Rechercher par année (par défaut 2008/2009): 
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=06">2006</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=07">2007</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=08">2008</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=09">2009</a> -
    		<?php if ($search->total > 5) echo '<a href="#top" title="haut de page">haut de page</a>'; ?>
    		</div>
    </div>
    <?php
    #ADMINISTRATION
    
    	include_once(PLX_CORE.'lib/class.plx.admin.php');
    	# Creation de l'objet plxAdmin et test sur connection
    $plxAdmin = & new plxAdmin(PLX_CONF);
    $pwd = $plxAdmin->getPasswd(PLX_ROOT.$plxAdmin->aConf['passwords']);
    
    # Test sur l'identification
    if (@!$auth_page AND (empty($_SESSION['admin']) OR empty($pwd[ $_SESSION['author'] ]) OR $pwd[ $_SESSION['author'] ] !== $_SESSION['pass'])) {}
    else {
    echo '<p>Vous étes connecté en tant qu\'administrateur . test sur eventuelle administration du moteur de recherche </p>';
    }
    ?>
    
    Bonnes fêtes

    edit , peut tu aussi le tester avec le théme par defaut ?
    des fois que tes diverses modif et ajout de fonctionalité ne jouerait pas aussi en defaveurs , sur ma page en ligne avec le themes par defaut ça roule pas mal


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • HamtaroHamtaro Member
    décembre 2008 modifié
    Superbe boulot ! Tu me gâte pour cette fin d'année ^^

    Ca roule avec "test" en année par défaut.
    Par contre les deux premiers résultats ne présente pas le mot clefs en gras dans le résumé. Il a été le chercher ou le mot ?

    Je pense qu'il faudrait mettre en avant l'année de recherche lorsqu'on la change, histoire que l'utilisateur sache qu'il a changé les réglages et recherche en 2007 (on voit pour le moment que dans la barre du navigateur)

    En tout cas, c'est du très très beau boulot. J'ai hâte de voir une version finale. ;)

    Merci à toi :)

    Edit : par contre, j'ai pas vraiment compris comment effectuer une recherche sur une nouvelle année. Faut d'abor cliquer sur 2007 puis lancer une recherche ?
    Elle m'a balancée une erreur 500 pour "test" sur 2007. Ou alors elle me rebalance les même résultats que par défaut..
  • heu ,
    rapidement :
    par defaut : résultat sur 2008/09
    puis , modif : pagination et formulaire en haut et fin de page
    plus de résumé vide :
    <?php
    # On démarre la session
    session_start();
    /**
     * Classe plxSearch Recherche avancée avec résumé et pagination
     * @Pages statiques Pluxml beta 4
     * @extends plxMotor
     * @author    Griboval Cyril
     * @BETA
     **/
    class plxSearch extends plxMotor {
    
    function plxSearch($filename) {
    parent::plxMotor($filename);
    # repertoire ou sont stocké les articles
    $plxGlob_arts = & new plxGlob(PLX_ROOT.$this->aConf['racine_articles']);
    # masque de nom de fichier correspondant a un article publié
    //$this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
    if (!empty($_GET['year'])){$this->year=$_GET['year'];}
    else {$this->year ='('. date("y") .') | (09) ';}
    $this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{2}['.$this->year.']{2}[0-9]{8}.[a-z0-9-]+.xml$/';
    
    #extraction de touts les noms d'articles
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    #nettoyage et recupération de l'url de base
    $this->sUrl = $this->getsurl();
    $this->form = $this->makeForm();
    }
    function makeForm() {
    #mise en place provisoire formulaire
    #LE FORMULAIRE :
    $url = $this->getsUrl();
    if ($this->word !='')  $formMsg='  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
    		  else $formMsg = 'Faire une recherche .';
    $form ='         <form method="post" action="'. $url.'"  class="recherchePagination">
              <fieldset><legend >'.$formMsg.'</legend>
                <p>
    				<input name="search" size="15" maxlength=\"255\" 
    					value="'.$this->word.'"
    					type="text" class="search" /> 
    				<b> >> </b> 
    				<input type="submit" value="rechercher !" />
    			</p>
              </fieldset>
    		  
            </form> 
    		<p>Rechercher par année (par défaut 2008/2009): 
    			<a href="'. $url.'&search='.$this->word.'&year=06">2006</a> -
    			<a href="'. $url.'&search='.$this->word.'&year=07">2007</a> -
    			<a href="'. $url.'&search='.$this->word.'&year=08">2008</a> -
    			<a href="'. $url.'&search='.$this->word.'&year=09">2009</a>
    		</p> ';
    return $form;
    }
    
    	/**
    	 * Méthode qui retourne l'url de base de la page statique
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
    		function getsUrl() {
    			// decoupage de l'url  
    				$geturl = explode("?", $_SERVER['REQUEST_URI']);
    				/*initialisation  de la variable reconstruisant l'url */
    				$redourl='';
    				
    			// recuperation des valeurs $_GET uniquement ( aprés le '?' )
    				for($i=1;$i < count($geturl);$i++) 
    					{
    						$redourl .=$geturl[$i];
    				    }
    			
    			// découpage des valeur $_GET (si '&' présent , se trouve dés la seconde clé du tableau )
    				$topurl = explode("&", $redourl);	
    			
    			// on ne garde que la premiere valeur
    				$finalurl = '?'.$topurl[0];
    
    			// nettoyage des $_POST au passage ...
    				if (!empty($_POST)) {
    					plxUtils::unSlash($_POST);
    				}
    			
    			#renvoi de l'url de base
    				return $finalurl ;
    		}
    
    
    
    	/**
    	 * Méthode qui elague et fait un résumé des résultats de recherche
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
      function getresume($content,$word) {
     
    
    
    		#création du contexte du mot recherché (extraits page) 
    		#recherche de 0 à 50 caractéres avant et aprés le mot recherché
    			$masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s)?]{0,50}';
    
    			preg_match_all('#'.$masque.'('.$word.'?)'.$masque.'#', $content, $out);
    			
    		# on separe chaque extraits
    			foreach( $out[0] as $value ) {  $resume .= ' ... '.$value.' ';}
    
    			$resume=stripslashes($resume).' ... ';
    
    		# ce mot peut apparaitre plusieurs fois ! 
    		# (0-50 caractéres + mot recherché +0-50 caractéres ) X nb occurences = .... 
    		# on limite alors le résumé a une chaine qui ne contient qu'une trentaines d'espaces
    			if ($resume='... ') $resume=$content; 
    			if (preg_match('#(?:\W+\w+){0,30}\W+\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}	
    			
        	# Mise en evidence visuelle : engraissage et grossisement de l'occurence
    
    			$content=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);	
    
    		# renvoi du traitement 
    		
    			return $content;
    }  
    
    
    	/**
    	 * Méthode qui formatte les résultats de recherche
    	 * 
    	 * @author	Griboval Cyrille
    	 **/
    function getsearch() {
    
    $totalResult=0;
    # variables de pagination
    $nbPerPage =15;
    $countResult = 1;
    $page=1;
    if ($_GET['page']) {
    $page = $_GET['page'];
    if (is_numeric($page)) {
    		$countResult = ($_GET['page']-1)*$nbPerPage+1;
    	}
    }
    $countEnd = $countResult + $nbPerPage - 1;
    		
            $i = 0;	
    
    	/* Recuperation et Nettoyage des mots recherché */  
            if(isset($_GET['search']))$word =$_GET['search'] ;
    				# on privilégie la requete $_POST
    		if(isset($_POST['search']))$word =$_POST['search'] ;
    		$this->word = $word;	
            $word = addslashes($word);
            $word = strtolower($word); 	
    		
    		# Si on a des fichiers
            if(is_array($this->aFiles)) { 
            $nbcfiles =count($this->aFiles);
            $nbccount = 0;
            $i = 1;
    	
    	/* on parcours tout nos fichiers , attention ça peut-etre long */        
    	while ($nbccount+1 <= $nbcfiles):
    	    $file2open = PLX_ROOT.$this->aConf['racine_articles'].$this->aFiles[$nbccount];
    	    $this->parseArticle($file2open);
    	    $this->art =$this->parseArticle($file2open);
    	    $nbccount++;
    	
        /* on extrait les titre chapo et content pour y rechercher notre chaine */ 
    	
                $content = $this->art['title'];
                $content .=' '.strip_tags( $this->art['chapo']).' ';
                $content .= strip_tags($this->art['content']);
                $content = addslashes($content);
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
    			
    	/* si le terme recherché existe dans cette article */
    			if($trouve!==0){ 
    		
    		# extraction des résultat pour la page affichée uniquement 
    		if($i >= $countResult && $i<= $countEnd ) 		
    			{
     # museliere pour les trés long articles on se limite aux 200 premiers mots
     if (preg_match('#(?:\W+\w+){0,199}\W+\w+#s' , $content , $limite)) {$content =$limite[0].' ';}
    
    				#création du résume , appel de la methode getresume() 
    					$content=$this->getresume($content,$word);
    					
    				#on alimente notre tableau 
    					$tableau[] = array($i,preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content,$this->art['date'],$trouve);
    				}
    			# comptage des résultats positifs	
                $i++;
    		
    			}
    
    			endwhile;
            }			
    
    		/* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<ul class="recherche">';
    		
    		# nombre total des articles trouvées 
    		if ($i ==-1) $i=0;
    		$totalResult = $i;
    		$this->total = $totalResult;
    		
    		
    		#on rafraichit leformulaire
    		$this->form = $this->makeForm();
    		#Mise en place de la barre de pagination 
    		$pagination = '<p class="recherchePagination"> Votre Recherche : <strong>'.$word.'</strong> Année(s):  '.$this->year.' .<br/> Il y a '.$this->total.' résultats .</p>';
    		// si total superieur au nb de resultat par page 
    		if ($this->total > $nbPerPage) {
    		$nbPage= ceil($this->total/$nbPerPage);
    		
    		// verification que la page demnadé existe 
    		if (($page > $nbPage) || ($nbPage ==NULL) ) header('location: '.$this->getsUrl().'&search='.$this->word);
    		$pagination = '<p class="recherchePagination"> Votre Recherche : <strong>'.$word.'</strong> . Année(s):  '.$this->year.'.<br/> Il y a '.$this->total.' résultats  sur '.$nbPage.' Pages :</p><p class="recherchePagination"><b>Page n° </b> ';
    				
        for($numpage=1;$numpage <= $nbPage;$numpage++)
         {
    		if($numpage == $page) {
    		$pagination .= ' : <b>'.$numpage.'</b> ';
    		}
    		else {
               $pagination .= ' : <a href="'.$this->getsUrl().'&search='.$word.'&page='.$numpage.'">'.$numpage.'</a> ';
    		   }
         } 
    		 $pagination .= ' : .</p>
    		 ';
    
    		}
    		$search_result = $pagination.'<ul class="recherche">';		
    		
            
    		# compte les enregistrement gardés
    		$n=count($tableau);	
    		# tri inverse sur le tableau (article récents mis en avant )
    		if ($tableau){rsort($tableau);
    		$search_result = '';}			
    		# puis on boucle dessus 	
            for($i=$n-1;$i >= 0;$i--) {
    			
    			
    		#creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '
    			<li>
    				<h3 class="rechercheTitle"><a href="?article'.$tableau[$i]['1'].'/'.$tableau[$i]['3'].'">'.$tableau[$i]['2'].' </a> </h3>
    				<p ><span class="rechercheNumero">('.$tableau[$i]['0'].')</span><span class="rechercheNb">  Terme trouvé '.$tableau[$i]['6'].' fois. </span>
    				<span class="rechercheShowDate"> Date : '.plxUtils::dateIsoToHum($tableau[$i]['5']).'</span>
    				</p>
    				<p class="rechercheResume">'.stripslashes($tableau[$i]['4']).'</p>
    				<p class="rechercheTargetBlank" >
    					<a href="?article'.$tableau[$i]['1'].'/'.$tableau[$i]['3'].'" onclick="window.open(this.href,\' _blank\');return false;" title="Oubrir dans une nouvelle page" style="font-weight:normal;font-style:italic";">( Ouvrir dans une nouvelle page  )</a> .</p>
    			</li>';
            }
    		/* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_result==$pagination.'<ul class="recherche">')  {$search_results = $pagination.' <p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p><p class="recherche"><b>La recherche a étè infructueuse </b>, il n\'y a rien qui corresponde à vos criteres .
             <br /> <b>Verifiez l\'orthographe ou changez les mots clés. </b></p>'; }
    		/* si notre variable de recherche a étè alimenté , on referme notre liste ordonnée */
             else {  
    		 $search_results =$pagination.$this->form.$search_results.'</ul><p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche </p>'.$pagination ;
    		
    		 
    		}
    		
            return $search_results;
        }
    
    }
    
    ?>
    <div id="content">
    		<div class="post">
    	
    	
    <?php
    		$search = new plxSearch((PLX_CONF));
    
    if(!empty($_POST['search']) || !empty($_GET['search'])) {
    		$search->prechauffage();
    		$search->demarrage();
    		$affichage =  $search->getsearch();
    
    echo $affichage;	
    
    	}
    	
    #LE FORMULAIRE :
    $url = !$search->getsUrl() ? $search->getsUrl() : NULL;
    $formMsg = !$search->word ? $search->word : NULL;
    
    
    		/* on (re)affiche le formulaire */
    		echo $search->form;
    
             ?>
    
             <!--<form method="post" action="<?php if($search) echo $search->getsUrl(); ?>">
              <fieldset><legend ><?php
    		  if ($search->word)  echo'  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
    		  else echo 'Faire une recherche .';
    		  ?></legend>
                <p><input name="search" size="15" maxlength=\"255\" value="<?php
    		    echo $search->word; 
    		  ?>" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
    		  
            </form> 
    		<p>Rechercher par année (par défaut 2008/2009): 
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=06">2006</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=07">2007</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=08">2008</a> -
    		<a href="<?php echo $search->getsUrl().'&search='.$search->word; ?>&year=09">2009</a> -
    		</p>-->
    		<?php if ($search->total > 5) echo '<a href="#top" title="haut de page">haut de page</a>'; ?>
    		</div>
    </div>
    <?php
    #ADMINISTRATION
    
    	include_once(PLX_CORE.'lib/class.plx.admin.php');
    	# Creation de l'objet plxAdmin et test sur connection
    $plxAdmin = & new plxAdmin(PLX_CONF);
    $pwd = $plxAdmin->getPasswd(PLX_ROOT.$plxAdmin->aConf['passwords']);
    
    # Test sur l'identification
    if (@!$auth_page AND (empty($_SESSION['admin']) OR empty($pwd[ $_SESSION['author'] ]) OR $pwd[ $_SESSION['author'] ] !== $_SESSION['pass'])) {}
    else {
    echo '<p>Vous étes connecté en tant qu\'administrateur . Test pour eventuelle administration du Moteur de Recherche .</p>';
    }
    ?>
    
    Bonnes fêtes a tous !


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Ca marche mais ca plante un peu de temps en temps...
    Sufit de recharger la page et ça marche...

    Font chier chez OVH...

    Merci encore pour le boulot et passe de bonnes fêtes ! :)
Connectez-vous ou Inscrivez-vous pour répondre.