Visualizzazione risultati 1 fino 17 di 17

Discussione: innescare un loop infinito

  1. #1
    Guest

    Lightbulb innescare un loop infinito

    ciao

    uno script con loop infinito, all'interno con la sleep() gestisco il tempo... sipponiamo che ogni 5 min faccio inviare una email

    può funzionare secondo voi anche dopo che il browser è stato chiuso? in teoria, secondo me, una volta avviato lo script questo non si ferma più... ??? posibile?!

  2. #2
    Guest

    Predefinito

    Se chiudi il browser lo script non sarà più in esecuzione.

    Comunque che senso ha farre un loop infinito quando puoi sicuramente fare un for() o un foreach() degli elementi?

  3. #3
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Uno script gira su un server web ed è quest'ultimo che decide quando lo script termina
    Il browser non ha alcuna voce in capitolo, perchè sino a quando lo script non termina esso non riceve nulla
    Ovviamente un server web non permette mai che avvenga un loop infinito, ad esempio su AV gli script terminano sempre con un timeout predefinito

  4. #4
    Guest

    Predefinito

    Come decide il server?

    Non ci sarebbero bisogno delle Cron se così fosse.

    Cioè, io basta che lanci un file e anche se il browser quindi non "utilizzo" la pagina, quel file in realtà è ancora elaborato?

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

    Predefinito

    Citazione Originalmente inviato da AlexKidd Visualizza messaggio
    Il browser non ha alcuna voce in capitolo, perchè sino a quando lo script non termina esso non riceve nulla.
    Piano: il browser inizia a ricevere contenuto non appena lo script emette dell'output - non tutto insieme alla fine.

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Cioè, io basta che lanci un file e anche se il browser quindi non "utilizzo" la pagina, quel file in realtà è ancora elaborato?
    eh?
    1. Quando un browser richiede una pagina, il server legge il file richiesto e se necessario comincia ad elaborarlo, producendo in entrambi i casi dell'output.

    2. Il browser riceve questo output e lo renderizza nella pagina man mano - con un minimo ritardo per evitare che la pagina appaia a pezzettini.

    3. Se il browser interrompe la ricezione, la connessione è chiusa ed il server termina l'elaborazione dello script.

    4. Se lo script termina, il server chiude la connessione ed il browser mostra la pagina completata.

    5. Se lo script non termina entro un tempo massimo, il server smette di elaborarlo violentemente, evitando così la creazione di problematici loop infiniti.
    Ultima modifica di dreadnaut : 24-08-2009 alle ore 14.40.49

  6. #6
    Guest

    Predefinito

    Allora ho ragione io, se mentre si sta eseguendo lo script, io chiudo la pagina, lo script non viene più elaborato, no?

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

    Predefinito

    La terminazione istantanea dipende dal server, ma di certo che un timeout sull'esecuzione, mentre per l'invio dell'output ci sono una riga di caveat.

    Non essendo garantita l'esecuzione oltre un breve numero di secondi, uno script non dovrebbe mai continuare, ma cercare di completare l'esecuzione al più presto possibile e visualizzare una pagina.

  8. #8
    Guest

    Predefinito

    non dico istantaneamente, ma non credo che se faccio un while() che innesca un loop infinito, chiudendo la pagina, lo script arrivi a fermarsi per il timeout imposto dal server, è questo quello che intendo.


  9. #9
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Piano: il browser inizia a ricevere contenuto non appena lo script emette dell'output - non tutto insieme alla fine.
    Puoi dimostrarlo?

    È vero che, ad esempio, se usato da linea di comando (bufferizzazione permettendo) l'interprete PHP produca l'output durante l'esecuzione. Ma il server web prima genera la pagina intera e poi la invia, secondo me

    Edit:

    Prova ad esempio questo semplice script (prova anche con valori diversi di $i)

    Codice PHP:
    <?
    echo "<pre>";

    $i=0;

    while(
    $i<2)
    if(
    time()%5==0)
    {
    $i++;
    sleep(1);
    echo
    time()."\n";
    }

    ?>
    Io l'ho provato in locale (quindi nessun ritardo di rete) eppure la pagina arriva solamente quando e totalmente generata

    Inoltre io ho sempre sostenuto questa cosa per un motivo semplice e legato ad AlterVista: quando si supera la banda mensile qualsiasi pagina sia stata generata viene sostituita con un avviso (non sempre l'istruzione che accede al database è la prima in uno script) quindi vuol dire che il server web è in grado di scartare la pagina e per farlo non deve inviarla prima che essa sia completata
    Ultima modifica di AlexKidd : 25-08-2009 alle ore 01.25.53 Motivo: aggiunta dimostrazione

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

    Predefinito

    Citazione Originalmente inviato da AlexKidd Visualizza messaggio
    Puoi dimostrarlo?
    Se vuoi ti dico che mi sto inventanto cose per nascondere la Verità del Buffering. O forse... mi sono documentato!?


    Hai letto i caveat che ho linkato sopra, dalla guida del php? Hai letto come funziona il buffering dell'output del php? C'è una catena di trasmissione dei dati lunga assai, e più buffer lungo la via che possono "pacchettizzare" la trasmissione, ma php produce output subito e lo indirizza verso il browser:

    php output buffering extension del php apache [eventuale buffer di Apache ] browser buffer del browser visualizzazione

    Solo usando ob_start() puoi ritardare l'invio e accumulare tutto l'output, e persino ottenere le stringa e modificarla prima che questa sia effettivamente inviata - utile se devi modificare righe dell'header durante l'output della pagina.



    Uno script come quello sopra non produce sufficiente output per riempire il buffer e causare l'invio parziale dei dati verso il browser. Manda in output un paio di KB per iterazione e vedrai che l'output ti arriva pezzo per pezzo.
    Ultima modifica di dreadnaut : 25-08-2009 alle ore 02.24.18

  11. #11
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    ok, riconosco quando ho torto

    comunque il mio dubbio era riferito unicamente alla bufferizzazione del server web, so' come si comporta il php, per questo avevo separato le due cose nel post precedente

  12. #12
    Guest

    Predefinito

    Se il browser interrompe la ricezione, la connessione è chiusa ed il server termina l'elaborazione dello script.
    Non so come funzioni qui su AV, ma quando sul mio server faccio partire un while e poi chiudo anche la pagina del browser questo continua ad eseguirsi fino a che non termina o fino ai 30 secondi fatidici

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da guglio Visualizza messaggio
    Non so come funzioni qui su AV, ma quando sul mio server faccio partire un while e poi chiudo anche la pagina del browser questo continua ad eseguirsi fino a che non termina o fino ai 30 secondi fatidici
    Come fai a vederlo scusa?

  14. #14
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Come fai a vederlo scusa?
    Ha un dedicato...shell? :)

    @robizzar: per evitare questi problemi, fai una sola invocazione di mail(), e utilizza gli header per inviare delle copie carbone (CC - BCC).


    Ciao!
    Ultima modifica di programmazioned : 25-08-2009 alle ore 14.01.28

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Ha un dedicato...shell? :)

    @robizzar: per evitare questi problemi, fai una sola invocazione di mail(), e utilizza gli header per inviare delle copie carbone (CC - BCC).


    Ciao!
    Il realtà il mio problema è che non funziona... cioè avrei voluto poter avere un loop infinito in modo da fargli fare ciò che volevo una volta innescato senza bisogno del browser.
    Avrei avuto un server in remoto al mio servizio

  16. #16
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Come fai a vederlo scusa?
    Semplice: lo script gestiva i movimenti che doveva fare un utente bot all' interno di un gdr che ho sviluppato.
    Il personaggio continuava a muoversi anche quando la pagina era chiusa..
    E si stoppava dopo i 30 secondi magici..
    Ultima modifica di guglio : 25-08-2009 alle ore 15.24.12

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

    Predefinito

    Citazione Originalmente inviato da guglio Visualizza messaggio
    Non so come funzioni qui su AV, ma quando sul mio server faccio partire un while e poi chiudo anche la pagina del browser questo continua ad eseguirsi fino a che non termina o fino ai 30 secondi fatidici
    Scritto sopra, il timeout c'è sempre, la terminazione non è detto.

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    La terminazione istantanea dipende dal server, ma di certo che un timeout sull'esecuzione [...]

Regole di scrittura

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