Visualizzazione dei risultati da 1 a 7 su 7

Discussione: timeout sulla ricerca

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346

    timeout sulla ricerca

    ciao a tutti.
    Ho applicato un blog su un sito e ora stò cercando di far funzionare la pagina di ricerca.

    la funzione che viene richiamata è la seguente:
    Codice PHP:
    function chop_text($posttext$minimum_length$length_offset) {
       
    // The approximate length you want the concatenated text to be
       //$minimum_length = 260;
       // The variation in how long the text can be
       // in this example text length will be between 200-10=190 characters
       // and the character where the last tag ends
       //$length_offset = 10;
       // Reset tag counter & quote checker
       
    $tag_counter 0;
       
    $quotes_on FALSE;
       
    // Check if the text is too long
       
    if (strlen($posttext) > $minimum_length) {
           
    // Reset the tag_counter and pass through (part of) the entire text
           
    for ($i 0$i strlen($posttext); $i++) {
               
    // Load the current character and the next one
               // if the string has not arrived at the last character
               
    $current_char substr($posttext,$i,1);
               if (
    $i strlen($posttext) - 1) {
                   
    $next_char substr($posttext,$i 1,1);
               }
               else {
                   
    $next_char "";
               }
               
    // First check if quotes are on
               
    if (!$quotes_on) {
                   
    // Check if it's a tag
                   // On a "<" add 3 if it's an opening tag (like <a href...)
                   // or add only 1 if it's an ending tag (like </a>)
                   
    if ($current_char == "<") {
                       if (
    $next_char == "/") {
                                           
    $tag_counter++;
                       }
                       else {
                           
    $tag_counter $tag_counter 3;
                       }
                   }
                   
    // Slash signifies an ending (like </a> or ... />)
                   // substract 2
                   
    if ($current_char == "/"$tag_counter $tag_counter 2;
                   
    // On a ">" substract 1
                   
    if ($current_char == ">"$tag_counter--;
                   
    // If quotes are encountered, start ignoring the tags
                   // (for directory slashes)
                   
    if ($current_char == "\""$quotes_on TRUE;
               }
               else {
                   
    // IF quotes are encountered again, turn it back off
                   
    if ($current_char == "\""$quotes_on FALSE;
               }

                               
               
    // Check if the counter has reached the minimum length yet,
               // then wait for the tag_counter to become 0, and chop the string there
               
    if ($i $minimum_length $length_offset && $tag_counter == 0) {
                  
    // Ensure complete word is display & not partial... search for space
                  
    $nospace true;
                  while ( 
    $nospace ) {
                  if ( 
    substr($posttext,$i,1) != " ")
                   {   
    $i++;
                   }
                   else {  
    $nospace false; }
                  }
                   if ( 
    substr($posttext,$i+1,1) == "/") {   $i=$i+2;   }
                   
    $posttext substr($posttext,0,$i 1) . "...";
                   return 
    $posttext;
               }
           }
       }
                 return 
    $posttext;

    la riga che richiama la funzione è :
    Codice PHP:
    $message chop_text($message50050)."
    ....<a class=\"std\" href=\""
    .$_SERVER['PHP_SELF']."?mode=viewid&amp;post_id=".$row['post_id']."\">Continue</a>"
    Modificando il tempo di offset e la lunghezza della stringa che va a controlare riesco a far apparire il mesasggio di errore "dato non trovato" anche se il dato probabilmente esiste, ma è situato in una porzione di testo che non viene controllata, ma nel caso in cui ricerchi la parola "email" lo script va in timeoute mi dà:
    Fatal error: Maximum execution time of 30 seconds exceeded in ...\function.php on line 650
    che corrisponde alla riga :
    Codice PHP:
     if ($i $minimum_length $length_offset && $tag_counter == 0) {
                  
    // Ensure complete word is display & not partial... search for space
                  
    $nospace true;
                  while ( 
    $nospace ) {
                  if ( 
    substr($posttext,$i,1) != " "//<--riga 46
                   
    {   $i++;
                   }
                   else {  
    $nospace false; }
                  }  
    //<-- riga 50 della pagina 
    Cambiando il valore di offset con cui effettuo la ricerca e il valore della stringa su ui effettua la ricerca cambia la riga di errore.
    precedentemente era 10 il tempo di offset e l'errore lo dava sulla riga 46
    Chi sa darmi un consiglio su come risolvere??

  2. #2
    Fatal error: Maximum execution time of 30 seconds exceeded in ...\function.php on line 650
    questo errore indica che lo script ha impiegato + di 30 secondi per l'elaborazione del risultato finale, devi cambiare il max execution time dal php.ini [di default è segnato proprio a 30 secondi]

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346
    si esattamente,
    ma io non volevo cambiare il tempo di esecuzione del php.ini, vorrei soltanto che nel caso in cui il tempo di esecuzione sfora i 29,9999 secondi, prima che vada in timeout, mi visualizzi un messaggio di errore, (che non fosse il fatal error...) oppure, magari... modificando i parametri di ingresso per la ricerca, <testo, max lunghezza, offset> in modo che bene o male mi restituisca un risultato: o i messaggi con il testo, oppure il messaggio di errore.
    Il timeout avviene nel caso di ricerche tipo "email, post...(devo ancora provarne altre)", mentre se cerco una parola che sono sicuro essere presente in una delle prime posizioni dei vari post, il risultato viene stampato a video e sottolineato come giusto sia.
    qualche idea??

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346
    ho aumentato il tempo del php.ini da 30 a 60, ma il risultato è lo stesso. se la parola ricercata è nelle prime posizioni ok, altrimenti va in timeout!
    se invece non lo trova e non so per quale motivo e in quale caso mi restituisce il messaggio:

    ----------------------------------------
    Errore

    La tua ricerca non ha prodotto risultati.

    Indietro
    ---------------------------------------

    che non è altro che la parte di codice che viene dopo la riga che chiama la funzione:
    Codice PHP:

    $sql 
    "SELECT COUNT(a.post_id) AS num_posts
    FROM " 
    POST_TBL " a
    WHERE a.subject like '%"
    .$keyword."%' OR a.message like '%".$keyword."%'" ;

    if ( !(
    $result $db->sql_query($sql)) )
        { 
    $sql_error $db->sql_error();  echo $sql_error['message']; }
    $numrow= ( $row $db->sql_fetchrow($result) ) ? intval($row['num_posts']) : 0;

    $pagination pagelink("search&keyword=".$keyword$pageno$bloglimit$numrow);

    $sql "SELECT ".CAT_TBL.".cat_desc, ".POST_TBL.".cat_id, ".CAT_TBL.".cat_id, ".POST_TBL.".post_id, ".POST_TBL.".subject,".POST_TBL.".message, ".USER_TBL.".user, ".POST_TBL.".timestamp, ".USER_TBL.".id, ".POST_TBL.".user_id FROM ".POST_TBL.", ".USER_TBL.", ".CAT_TBL."
    WHERE "
    .POST_TBL.".user_id=".USER_TBL.".id  AND  ".CAT_TBL.".cat_id=".POST_TBL.".cat_id AND  ( $searchlogic )
    Order by "
    .POST_TBL.".post_id DESC
    LIMIT 
    $pageno$bloglimit";
    //".POST_TBL.".subject like '%".$keyword."%' OR ".POST_TBL.".message like '%".$keyword."%'

    if( !($result $db->sql_query($sql)) )
       {
        
    $sql_error $db->sql_error();
        echo 
    $sql_error['message'];
       }

    $result $db->sql_query($sql) ;

    if( 
    $db->sql_numrows($result)==) {
        
    error($lang['Error'],$lang['Search_Error']);
        }

    $template->assign_block_vars('search', array(
              
    'KEYWORD'        => $lang['Search_Results']." : [b]".$keyword."[/b]",
    ));

    while (
    $row $db->sql_fetchrow($result)) {

    $message=$row['message'];
    //$message=viewsmile($message);
    $message=viewbbcode($message);
    $message=viewlink($message);
    $message=autolink($message);
    $message nl2br($message);

    //$keywords = explode(" ", str_replace(array("+","-","*","~","\"","(",")","<",">","\\"),"",$keyword));
    $message highlight($message,$keywords);
    $subject highlight($row['subject'],$keywords);

    $message chop_text($message50010)."
    ....<a class=\"std\" href=\""
    .$_SERVER['PHP_SELF']."?mode=viewid&amp;post_id=".$row['post_id']."\">Continue</a>";

    /// Query for No of Comments //
    $querycomment  "SELECT comment_id FROM ".COMMENT_TBL."
    WHERE "
    .COMMENT_TBL.".post_id = ".$row['post_id'];

    if ( !(
    $commentresult $db->sql_query($querycomment)) )
        {
        
    $sql_error $db->sql_error();
        echo 
    $sql_error['message'];
        } 
    Non è possibile limitare la ricerca impostando un numero di caratteri della stringa e con un off set adeguato?? pareri a riguardo??

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346

    soluzione alternativa??

    Dato che non riesco a trovare una soluzione, e che va in time out solo in casi di ricerche particolari di cui non capisco l'origine: se cerco delle frasi mi da un risultato: trovato o non trovato, ma se cerco alcune parole tipo il mio nome "roberto" che stà in alcuni titoli di post, o come firma dei testi ecc.. oppure come la parola "email" che è presente un pò ovunque, lui va in time out (ho pensato che poteva essere causato dal fatto che ci sono troppe istanze da ricercare tra i testi, ma se cerco la parola "per" o la parola "di" mi vengono visualizzati i risultati in tmepi brevissimi "immediati"), quindi non sapendo come risolvere vorrei chiedere:

    è possibile impostare un errorre di visualizzazione nel caso in cui lo script va in time out del tipo: "spiacente, effettuare una ricerca con una parola chiave diversa" , invece del fatal error che mi visualizza la riga di errore nella pagina del codice?

    p.s. tipo quelle che accade nella ricerca del sito di html quando vengono inseriti parametri non validi

    Ho provato anche aumentando il time out da 30 a 90 ma il problema persiste.


  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346
    up? nessuna idea?? pleaseeeeeeeeee..

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    346
    ok...dato che non si riesce a risolvere... qualcuno conosce uno script da poter utilizzare per la ricerca del testo su stringhe inserite nel db?
    Gli script che ho visto fino ad ora mi permettono la ricerca solo su una tabella e di questa su una sola colonna, mentre io dovrei effettuare la ricerca su l'intero db ( dato che si tratta di un blog, devo effettuare la ricerca su 3 tabelle e su ognuna delle tabelle ricercare su diverse colonne)

    qualche consiglio??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.