Visualizzazione risultati 1 fino 15 di 15

Discussione: gestire errore limite query superato tramite PHP

  1. #1
    meomodo non è connesso Neofita
    Data registrazione
    08-05-2008
    Messaggi
    3

    Question gestire errore limite query superato tramite PHP

    È possibile gestire manualmente l'errore di superamento del limite orario di query fatte verso il database mysql?

    Sto sviluppando una parte dinamica del mio sito, ed ho notato che una volta superato il limite orario di 500 queries, lo script termina dopo aver stampato il seguente errore:

    Codice HTML:
    <p><b>&Egrave; stata superata la soglia massima di queries che il database pu&ograve; eseguire in un'ora, &egrave; necessario potenziare il database ad una classe superiore, se il problema persiste avvisa il webmaster del sito</b></p>
    Vorrei poter intercettare tale errore in modo da gestirlo, ad esempio effettuando il redirect verso una pagina d'errore personalizzata. Ho provato con uno script del tipo

    Codice PHP:
    $result = mysql_query($query, $link);
    if (!
    $result) header("location: errore.html");
    ma lo script viene terminato prima dell'if.

    Qualche idea su come procedere?

  2. #2
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Devi creare un file .htaccess nella cartella che contiene lo script e devi aggiungere questo:
    Codice:
    php_value av.mysql_die_on_maxqueries_err 0
    In questo modo lo puoi gestire con il codice che hai scritto.
    Ultima modifica di andreafallico : 17-02-2010 alle ore 16.49.06

  3. #3
    meomodo non è connesso Neofita
    Data registrazione
    08-05-2008
    Messaggi
    3

    Thumbs up

    Grazie mille!

  4. #4
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Angry Problema con messaggio queries superate

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    Devi creare un file .htaccess nella cartella che contiene lo script e devi aggiungere questo:
    Codice:
    php_value av.mysql_die_on_maxqueries_err 0
    In questo modo lo puoi gestire con il codice che hai scritto.
    Ciao ho usato molto il tasto cerca ma non ho trovato niente a parte questa discussione ma non ci capisco niente perchè sono un noob in programmazione e vorrei chiedervi se potreste spiegarmi passo passo come personalizzare il messaggio delle queries superate per far si che una volta superato il limite fornisco un elenco di operazioni da fare... magari inserendo da me parti di codice... il blog consuma molte queries ma il sito web non ha nessun interfacciamento con il server vorrei dare una valida alternativa in attesa che il numero di queries si rigeneri quindi senza perdere eventuali visitatori.

    esempio.

    Il limite di queries all'ora è stato superato.

    Visita l'homepage del sito (collegamonto home.htm)

    Spero mi possiate essere d'aiuto.
    Grazie

  5. #5
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Come detto sopra, nella root devi creare il file .htaccess e aggiungi questo:
    Codice PHP:
    php_value av.mysql_die_on_maxqueries_err 0
    poi per gestirlo, devi fare così:
    Codice PHP:
    $query = "............";
    $record = mysql_query($query, $mysql);
    if(
    $record){
    ...
    ...
    ...
    }
    else{
    $errno = mysql_errno();
    if(
    $errno == 1226)
    echo
    'Il limite di queries all\'ora è stato superato.<br />Visita l\'<a href="home.htm">homepage</a> del sito.';
    else
    echo
    mysql_error();
    }
    @
    mysql_close($mysql);
    Ultima modifica di andreafallico : 11-05-2010 alle ore 18.14.43

  6. #6
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    Come detto sopra, nella root devi creare il file .htaccess e aggiungi questo:
    Codice PHP:
    php_value av.mysql_die_on_maxqueries_err 0
    poi per gestirlo, devi fare così:
    Codice PHP:
    $query = "............";
    $record = mysql_query($query, $mysql);
    if(
    $record){
    ...
    ...
    ...
    }
    else{
    $errno = mysql_errno();
    if(
    $errno == 1226)
    echo
    'Il limite di queries all\'ora è stato superato.<br />Visita l\'<a href="home.htm">homepage</a> del sito.';
    else
    echo
    mysql_error();
    }
    @
    mysql_close($mysql);
    OK scusa la stupidità:...

    Ho creato il file .htaccess con il blocco note e l'ho caricato nella root del server come mi hai indicato.

    L'altro codice per gestirlo dove lo inserisco? sempre nello stesso file?
    Panico.

  7. #7
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Citazione Originalmente inviato da freewebsite Visualizza messaggio
    L'altro codice per gestirlo dove lo inserisco? sempre nello stesso file?
    Panico.
    No, lo devi inserire nel file che gestisce la connessione al database.
    Per caso utilizzi qualche CMS?

  8. #8
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    No, lo devi inserire nel file che gestisce la connessione al database.
    Per caso utilizzi qualche CMS?
    Utilizzo wordpress :)

    se può darti una migliore idea:
    Sito web: http://www.freewebsite.altervista.org
    Blog: http://www.freewebsite.altervista.org/Blog
    Ultima modifica di freewebsite : 18-05-2010 alle ore 16.14.27

  9. #9
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Allora devi modificare la classe wpdb di wordpress.

  10. #10
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    Allora devi modificare la classe wpdb di wordpress.
    OK Trovato nella destinazione /Blog/wp-includes/wp-db.php

    Cosa inserisco? e soprattutto dove?

    Ti sto tirando matto ma è la prima volta che faccio una cosa simile -.-

  11. #11
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    La funzione da modificare è function query($query), ora vedo come funziona la gestione degli errori.

  12. #12
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Predefinito

    Grazie infinite per il tempo che mi stai dedicando :)

  13. #13
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Per ora, l'ho modificato in questo modo (non ho il tempo di studiarmi il funzionamento della gestione degli errori)
    Nel file /wp-includes/wp-db.php devi trovare (riga 388 nel __construct) questo codice:
    Codice PHP:
    if ( $this->has_cap( 'collation' ) && !empty($this->charset) ) {
    if (
    function_exists('mysql_set_charset') ) {
    mysql_set_charset($this->charset, $this->dbh);
    $this->real_escape = true;
    } else {
    $collation_query = "SET NAMES '{$this->charset}'";
    if ( !empty(
    $this->collate) )
    $collation_query .= " COLLATE '{$this->collate}'";
    $this->query($collation_query);
    }
    }
    e lo sostituisci con questo:
    Codice PHP:
    if ( $this->has_cap( 'collation' ) && !empty($this->charset) ) {
    if (
    function_exists('mysql_set_charset') ) {
    @
    mysql_set_charset($this->charset, $this->dbh);
    if(
    mysql_errno() == 1226)
    exit(
    'Il limite di queries all\'ora è stato superato.<br />Visita l\'<a href="home.htm">homepage</a> del sito.');
    $this->real_escape = true;
    } else {
    $collation_query = "SET NAMES '{$this->charset}'";
    if ( !empty(
    $this->collate) )
    $collation_query .= " COLLATE '{$this->collate}'";
    $this->query($collation_query);
    }
    }
    poi devi trovare (riga 713 nella funzione function query($query)) questo codice:
    Codice PHP:
    // If there is an error then take note of it..
    if ( $this->last_error = mysql_error($this->dbh) ) {
    $this->print_error();
    return
    false;
    }
    e lo sostituisci con questo:
    Codice PHP:
    // If there is an error then take note of it..
    if ( $this->last_error = mysql_error($this->dbh) ) {
    if(
    mysql_errno() == 1226)
    exit(
    'Il limite di queries all\'ora è stato superato.<br />Visita l\'<a href="home.htm">homepage</a> del sito.');
    $this->print_error();
    return
    false;
    }
    Ultima modifica di andreafallico : 18-05-2010 alle ore 18.26.39

  14. #14
    freewebsite non è connesso Neofita
    Data registrazione
    24-05-2007
    Messaggi
    13

    Predefinito

    sostituito tutto ma il messaggio non cambia visualizzo ancora:

    È stata superata la soglia massima di queries che il database può eseguire in un'ora, è necessario potenziare il database ad una classe superiore, se il problema persiste avvisa il webmaster del sito

  15. #15
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    In base a questo post: http://forum.it.altervista.org/php-m...tml#post658577, prova a creare l'.htaccess nella cartella blog e inserisci:
    Codice PHP:
    php_value av.mysql_die_on_maxqueries_err 0

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •