Visualizzazione risultati 1 fino 9 di 9

Discussione: [PHP] L'esecuzione termina se il client si disconnette?

  1. #1
    Guest

    Predefinito [PHP] L'esecuzione termina se il client si disconnette?

    Ciao a tutti!
    Oggi avrei un particolare quesito da porvi.

    Se io ho uno script PHP che ci impiega 20sec per essere eseguito sul server, se il client (per esempio che utilizzi Mozilla Firefox) viene chiuso dopo 5sec dall'inizio dello script, come si comporta quest'ultimo?
    Viene eseguito completamente o viene eseguito parzialmente fino a quando il client è disponibile?
    Se viene eseguito parzialmente, vi è modo di forzare l'esecuzione del resto dello script PHP sul server con client chiuso?

    Ciao,
    Mattia.

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Il server lo esegue sempre tutto.
    Non ha modo il server di vedere se hai il browser aperto o chiuso
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    In teoria, no.
    Lo script si interrompe se la connessione è persa.

    L'unico modo per evitare ciò, e purtroppo su altervista non è possibile farlo, è usare la funzione ignore_user_abort.

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    In teoria, ma avevamo fatto delle prove in passato e notato che lo script continua in ogni caso per un certo periodo di tempo, ovviamente minore o uguale al tempo di massima esecuzione.

    Per verificare, puoi eseguire qualcosa che scriva continuamente su file, e chiudere subito la pagina.

  5. #5
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    In teoria, no.
    Lo script si interrompe se la connessione è persa.

    L'unico modo per evitare ciò, e purtroppo su altervista non è possibile farlo, è usare la funzione ignore_user_abort.
    ignore_user_abort viene usato solo per l'esecuzione di script via linea di comando.
    Quando si passa via web non c'è modo per il server di sapere se uno chiude la connessione.

    Ovvio il tutto dando per scontato che lo script non vada in timeout(20sec sono tanti) e che lo script non preveda flush di dati(in questo caso non so come si comporti)

    Aggiorno
    Ho detto una cazzata su "ignore_user_abort", ma il manuale specifica
    PHP will not detect that the user has aborted the connection until an attempt is made to send information to the client. Simply using an echo statement does not guarantee that information is sent, see flush().
    Insomma bisogna abilitarlo e mandare un flush(), via flush appunto interpreta il valore di ritorno.
    Ultima modifica di binarysun : 15-04-2011 alle ore 14.24.47
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  6. #6
    Guest

    Predefinito

    Quindi se il client si disconnette l'esecuzione continua a meno che non vi siano chiamate a funzioni di output come echo?

    Scusatemi ma tra i si ed i no mi sono perso e non ci ho capito molto. xD

    Mettiamo il caso che io abbia questo script:
    Codice PHP:
    <?php
    require_once("database/db_abstraction_layer.php");
    require_once(
    "simplebrowser/simplebrowser.php");

    $browser = new SimpleBrowser();
    $database = new DatabaseDBAL();

    $query = (isset($_GET['query']) && !empty($_GET['query']) && is_string($_GET['query'])) ? $_GET['query'] : false;

    $words = explode(",",$query);
    if(
    is_array($words)){
    foreach(
    $words as $word){
    $html=$browser->get('http://www.google.it?q='.$word);
    $database->addResults($html);
    }
    }
    Se io gli do in pasto tanti parametri dopo la virgola, e considerando che ci vuole circa 1s per ogni richiesta get, continua a popolare il database entro il max_execution_time ?

  7. #7
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Citazione Originalmente inviato da makeyourweb Visualizza messaggio

    Se io gli do in pasto tanti parametri dopo la virgola, e considerando che ci vuole circa 1s per ogni richiesta get, continua a popolare il database entro il max_execution_time ?
    In questo caso si.
    Ovviamente i tempi di esecuzione varieranno.

    Aggiungo anche che non so come si comporta AV ma altri hosting dopo che vedono esecuzioni così prolungate ti potrebbero bloccare lo script.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,576

    Predefinito

    Sì.. dopo 30 secondi di esecuzione lo script viene bloccato indipendentemente se l'utente ha lasciato o no il sito.

    Viene mostrato un messaggio del tipo:
    Codice:
    Fatal error: Maximum execution time of 30 seconds exceeded in <percorso script + linea>
    Ciao!
    Ultima modifica di alemoppo : 15-04-2011 alle ore 17.05.44

  9. #9
    Guest

    Predefinito

    Grazie a tutti per l'aiuto. ^^

Regole di scrittura

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