Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    interrompere script a causa "Maximum execution time"

    Codice PHP:
    <?php 

    function gestione_errori() { //imposto la funzione che mi farà uscire il messaggio
    global $messaggio_personalizzato$url_pagina_senza_query_string;
    $error error_get_last();
    //echo "<pre>".print_r($_SERVER,true)."</pre>";
    //echo "<pre>".print_r($error,true)."</pre>";
    //echo ">>>".stripos($error['message'],'Maximum execution time')!==false;
      
    if ($error['type'] == and stripos($error['message'],'Maximum execution time')!==false) { //type == 1 è il timeout dello script
      //echo "$messaggio_personalizzato";
      
    echo $fine_scritp=date("H:i:s");
    echo <<< eof
    <script type="text/javascript" language="JavaScript">
    var messaggio_errore_js="
    $messaggio_personalizzato $fine_scritp";
    alert (messaggio_errore_js);
    //window.location.href="
    $url_pagina_senza_query_string";
    </script>
    eof;
      }
        else{
        
    //echo "<pre>".print_r($error,true)."</pre>";
        
    }
    }
    register_shutdown_function('gestione_errori'); //gli dico che alla fine dello script (o quando si blocca per un fatal) deve lanciare quella funzione.

    ini_set("max_execution_time",30);
    $sql_query_iniziale="select
      aaa
    From
      tbl1"
    ;

    collega_database($server_predef$utente_predef$password_predef'gestione_mr''');  
    $result mysql_query($sql_query_iniziale);
    ?>
    sostanzialmente lo script non si blocca dopo 30 secondi mentre l'sql gira...

    perchè?

    grazie anticipatamente per le eventuali risposte e buona giornata a tutti

  2. #2
    intanto userei questo: http://php.net/manual/en/function.set-time-limit.php

    in secondo, leggerei questa nota:

    The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.
    le query nel database non rientrano nel conteggio del time limit. Non sembra neanche esserci una possibilità in mysql di impostare un timeout su una query, ho dato uno sguardo in giro, tutti dicono eventualmente di killare il processo o cose simili. Quindi dovresti lanciare lo script in background e uccidere il processo se va in timeout. Come fa questo nella risposta: http://php.net/manual/en/function.se...mit.php#115057
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    intanto userei questo: http://php.net/manual/en/function.set-time-limit.php

    in secondo, leggerei questa nota:



    le query nel database non rientrano nel conteggio del time limit. Non sembra neanche esserci una possibilità in mysql di impostare un timeout su una query, ho dato uno sguardo in giro, tutti dicono eventualmente di killare il processo o cose simili. Quindi dovresti lanciare lo script in background e uccidere il processo se va in timeout. Come fa questo nella risposta: http://php.net/manual/en/function.se...mit.php#115057

    anzitutto grazie per la risposta....

    complicato il funzionamento, cerco di capire cosa fa ed applicarlo alla mia problematica

    nel frattempo qualcuno ha qualche altra idea?

    grazie anticipatamente per eventuali altre idee

  4. #4
    io mi concentrerei di piu nel capire perchè una query di select impiega piu di 30 secondi ad essere esguita, e nel caso ottimizzare la query/db ed eventualmente fare query di select paginate per evitare di prendere troppi record per volta
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    io mi concentrerei di piu nel capire perchè una query di select impiega piu di 30 secondi ad essere esguita, e nel caso ottimizzare la query/db ed eventualmente fare query di select paginate per evitare di prendere troppi record per volta
    è una tabella con 7 milioni di record già indicizzata a dovere

    anche con limit non cambia nulla

    ora ho provato così:
    Codice PHP:
    $result mysql_unbuffered_query ($sql_query_iniziale) or die("errore sql: " mysql_error());
        
        echo 
    $comando"$percorso_exe -u$dbuser -p$dbpass kill $id_connessione_da_terminare";
        
        
    $result=shell_exec($comando);
        echo 
    "<pre>@@@".print_r($result,true)."@@@</pre>"
    ma non lancia lo shell_exec, fino a quando non termina l'SQL

    è giusto?

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.