sleep

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
ciao
forse sono io che sono gnocco e non ho capito bene la filosofia di php

ho fatto una prova con il seguente stupidissimo codice (uguale a quello che è su php manual)

PHP:
<?php 
echo date("i:s")." prima<br>";
sleep(30);
echo date("i:s")." dopo";
?>

da quello che ho letto sleep sospende per x secondi lo script, quindi io mi aspettavo che lanciandolo si visualizzasse

05:03 prima

e dopo 30 secondi

05:33 dopo

invece il comportamento, al lancio, è il seguente:

per trenta secondi non visualizzo nulla (classica clessidra di attesa)
dopo 30 secondi appaiono contemporanemanete le due diciture.

perchè, sembra, esegue la seconda istruzione non partendo dalla prima?
 
Php è un linguaggio di scripting lato server, per cui il comportamento è più che normale. Quello che visualizzi col browser è il risultato dell'elaborazione dello script php lato server, per cui se blocchi l'elaborazione per 30 secondi vedrai il risultato dopo tale lasso di tempo.
 
ciao
lo so che è lato server, ma l'interpete non segue una logica, dovrebbe inviare al bw comunque una "interpretazione" che rispecchi l'ordine dello scripit se scrivo

echo "uno";
echo "due"

visualizzo

uno
due

non a caso due uno, quindi le righe di codice vengono interpretate con un certo ordine
 
Quello che dici riguardo alla sequenzialità del codice è esatto, però l'output verso il browser viene inviato solamente quando l'intero script è stato interpretato, non riga per riga.
Praticamente in fase di interpretazione dello script da te postato, viene calcolata la prima data, poi lo script attende 30 secondi, poi viene calcolata la seconda data ed infine la pagina così generata viene inviata al browsr. Infatti i dati temporali contenuti nelle date sono coerenti tra di loro (la seconda data ha 30 secondi in più rispetto alla prima).
 
ciao
ok, allora se io faccio uno script del tipo:

PHP:
for ($j=1; $j<=10000, $j++){

   echo $j."\n";

   if ($j % 100 ==0){
     sleep(1);
   }

}

non ho una attesa di un secondo ogni 100 echo, ma lo script prima di partire attende 100 secondi e poi mi stampa di continuo 10000 echo?

se è così come faccio allora a sospendere quando voglio io?
 
Esatto, lo script attende 100 secondi e poi invia l'output al browser visualizzando in un sol colpo i numeri da 1 a 10000.
Non credo tu possa sospendere l'esecuzione, l'unica è premere il tasto stop sul browser, ma in tal caso non verrà visualizzato alcun output.
Non so esattamente cosa devi fare, ma presumo che tu debba utilizzare javascript o ajax per ottenere quello che vuoi.
 
Scusa, ma forse ho frainteso la tua domanda sull'interruzione dello script, forse può tornarti utile la funzione exit() in quanto lo sleep() non interrompe, ma ritarda l'esecuzione dello script, mentre exit() la interrompe definitivamente.
 
ciao
quello che voglio (vorrei) fare è interrompere per un certo periodo l'invio di news letters (mi hanno detto che, se sono tante e ne ho circa 8000, intaso il server in quanto l'invio è troppo rapido). ho uno scripi che (in pseudo codice) fa

while ($email==$mysql_fetch_array($queri)){

tutto quello che serve

if invia con classe php mailer else errore
qui vorrei mettere l'attesa
}

che ci sia qualcosa di vero è probabile in quanto se invio poche email (circa 200) non ho problemi, cercando ad inviarne 8000 ad un certo punto comincia a darmi errore errore errore.......
 
Utilizzando la funzione sleep() in teoria potresti rallentare l'invio delle mail, ma considera che uno script php ha una durata limitata per la sua esecuzione in base alla configurazione di php presente sul server, per cui rischi di generare uno script timeout compromettendo l'esecuzione dell'intero script.
Non saprei come risolvere il tuo problema dato che non mi è mai capitata una simile situzione. Provo a fare delle ricerche. Un prima idea che mi viene in mente è quella di utilizzare uno schedulatore per script php.
 
ciao
intanto grazie, provo anche io (chi primo arriva...posta)

visto che sei il linea: ne sai qualcosa di errore http 403? se si dai un occhio ai miri in discussioni varie "rifuito di visualizzare 2"
 
Ho notato e letto il tuo post sull'errore 403. Effettuando una veloce ricerca col fido google ho notato che il problema da te evidenziato è comune a molte persone con modalità più o meno simili, ma non ho trovato spiegazioni soddisfacenti a riguardo.
Secondo me il problema è locale e non va ricervato sul server, ma sinceramente non saprei a cosa possa essere dovuto.
Faccio delle ricerche.