Discussione:
aspettare
(troppo vecchio per rispondere)
wrksplfl
2006-07-22 10:51:07 UTC
Permalink
ciao a tutti,
probabilmente è una domanda cretina, nel qual caso vi chiedo scusa in
anticipo.
durante l'esecuzione di uno script php ho la necessità di attendere alcuni
minuti, ma non riesco a trovare da nessuna parte nel manuale una wait o
qualcosa di simile che fermi per il tempo indicato l'esecuzione dello
script.
grazie per le risposte
wrksplfl
rob4you
2006-07-22 10:57:27 UTC
Permalink
Post by wrksplfl
attendere
sleep();

http://it.php.net/sleep

rob4you
Ubu re
2006-07-22 11:11:35 UTC
Permalink
Ciao wfkladsfjm e rob,
mi domando, ma a cosa può essere utile sleep()?
se si lancia uno script da cron?
a fare incupire gli utenti?
ciao.
wrksplfl
2006-07-22 11:20:44 UTC
Permalink
grazie a rob per a risposta.
per ubu, mò te spiego :)

ad ogni avvio del mio pc con win2k ho il desiderio che un programma venga
avviato 30 minuti dopo lo start, un'altro dopo altri 5 minuti, un altro
ancora dopo ulteriori 3 ecc ecc.
programmi non prodotti da me, per intenderci.
se conoscete un software free che faccia bene questa cosa, sono felice di
ascoltarvi, io ho cercato un crontab per windows con queste funzionalità, ma
con scarso successo. quindi ho deciso di farmi un semplice script php per
fare 'sta cosa ^_^
ancora grazie
rob4you
2006-07-22 12:04:12 UTC
Permalink
Post by wrksplfl
se conoscete un software free che faccia bene questa cosa, sono felice di
ascoltarvi, io ho cercato un crontab per windows con queste funzionalità, ma
con scarso successo. quindi ho deciso di farmi un semplice script php per
fare 'sta cosa ^_^
Non credo che però PHP sia adatto per questo scopo.....

Ma non esiste anche su Windows 2000 la gestione delle operazioni
pianificate?

Riguardo il dubbio di Ubu re....può rileggersi un thread di qualche giorno
fa, dove veniva fatta esattamente la stessa domanda, circa appunto l'utilità
della funzione sleep(): un motivo ad esempio potrebbe essere: immagine che
per interrogare un db devi attendere prima un tot tempo per determinati
motivi, bene, la funzione sleep() sarebbe l'ideale. Ovviamente di motivi ce
ne possono essere tanti....ovviamente a seconda del tipo di esigenza.

rob4you
www.outofmind.eu
wrksplfl
2006-07-22 12:13:37 UTC
Permalink
Post by rob4you
Non credo che però PHP sia adatto per questo scopo.....
veramente pare che, complice la mia scarsa esperienza di informatico, nulla
sia adatto :)
le operazioni pianificate in 2k ci sono eccome, ma a me non pare che ci sia
la possibilità di dire "esegui dopo x minuti dall'avvio della macchina". è
possibile specificare un giorno del mese, un intervallo di tempo ciclico,
giorni della settimana ecc ecc, ma pare che a nessuno freghi qualcosa che le
applicazioni vengano eseguite con quel criterio. basterebbe l'esecuzione
automatica, ma così partirebbero tutte insieme, facendo casino, invece
devono partire un po' alla volta, a intervalli di un certo tot.

i problemi che sto riscontrando con php sono i seguenti:
-se nel file di configurazione specifico un path tipo "c:\tappo\tappo.exe"
lui mi interpreta i \t come dei tab, il che è male; probabilmente si può
ovviare, ma non ci ho ancora studiato perchè l'altro problema è più grave;
-arrivo ad eseguire un programma, il programma parte ma sembra che php si
incanti sull'exec. ho guardato il manuale, e suggeriscono per questo bug
(!!!) un workaround: fare una session_write_close() prima di fare l'exec. ci
ho provato, ma non sembra che sortisca l'effetto voluto, almeno non sempre,
e ho come l'imperessione che exec resti in attesa di un codice di ritorno
che non arriverà mai visto che l'applicazione in questione forse non lo da
affatto.

scoraggiato da queste premesse mi son detto. facciamo un bel file bat, meno
elegante ma...
bhè, non ci crederete, ma dopo l'avvio del primo programma anche quello si
incanta!!!!
ma che sfiga.
grazie comunque
Aragorn
2006-07-22 12:20:03 UTC
Permalink
Post by wrksplfl
ma che sfiga.
grazie comunque
se vuoi ti faccio uno eseguibile che poi metterai
nell'esecuzione automatica... e' una stronzata da fare.
ciao
wrksplfl
2006-07-22 12:20:19 UTC
Permalink
Post by Aragorn
se vuoi ti faccio uno eseguibile che poi metterai
nell'esecuzione automatica... e' una stronzata da fare.
ciao
ti ringrazio della premura, ma sarei più interessato al codice sorgente.
ciao
Luca(riello)
2006-07-22 13:20:35 UTC
Permalink
Post by wrksplfl
veramente pare che, complice la mia scarsa esperienza di informatico, nulla
sia adatto :)
Se ti può essere utile saperlo io lo uso come opzione per il mio motore
socket (per chat) fatto in php.
Siccome tale script (consistente in un ciclo infinito) produce dei log su
file, quando ho la necessità di scaricare il file dal server, per non
correre il rischio che tale file cambi mentre lo sto scaricando, e per non
chiudere definitivamente la chat per poi riavviarla, con un comando creato
da me metto in pausa lo script proprio con sleep. In modo che la chat si
blocca per 10 secondi (non producendo così alcun log) e io mi posso
scaricare il file tranquillamente.
Non so... forse c'era un'altra via più semplice... ma per ora sto usando
questa :-)

ciao,
Luca(riello)
wrksplfl
2006-07-22 12:39:03 UTC
Permalink
Post by rob4you
Non credo che però PHP sia adatto per questo scopo.....
mi pare di capire che tutte le funzioni che trovo (shell_exec, popen,
proc_open, exec) hanno lo scopo di eseguire un comando e dare accesso
all'output...
questo implica che il programma lanciato debba terminare dando un'uscita.
questo non è il mio caso: i programmi lanciati continueranno a funzionare
anche dopo il termine dell'esecuzione dello script, e non producono alcun
output.
possibile che non ci sia una cosa adatta? mhà!
grazie
rob4you
2006-07-22 13:01:08 UTC
Permalink
Post by wrksplfl
mi pare di capire che tutte le funzioni che trovo (shell_exec, popen,
proc_open, exec) hanno lo scopo di eseguire un comando e dare accesso
all'output...
Diciamo che quelle funzioni ti permettono di eseguire un programma da shell,
sia se restituisca un output sia se non lo faccia.
Post by wrksplfl
possibile che non ci sia una cosa adatta? mhà!
Ti ripeto, usare php per l'idea che hai tu, sembra un'idea un po' troppo
"alternativa" :-)
Vedi....alla fine a te interessa solo lanciare dei programmi a determinati
intervalli di tempo, e se è tutto qui, non vedo il motivo di installare un
web server, poi di installare apache, ecc ecc.
Come se non bastasse, considera che dovrest, tra l'altro, modificare le
impostazioni di configurazione del php.ini, dal momento che un'attesa di
mezz'ora è veramente tanto! L'esecuzione andrebbe in timeout (di default ci
va già dopo trenta secondi, pensa tu!!).
Secondo me puoi provare a esporre il tuo problema direttamente a dei ng di
windows.

rob4you
wrksplfl
2006-07-22 13:15:21 UTC
Permalink
Post by rob4you
Diciamo che quelle funzioni ti permettono di eseguire un programma da shell,
sia se restituisca un output sia se non lo faccia.
e allora perchè si blocca finchè non chiudo il programma lanciato?
Post by rob4you
Vedi....alla fine a te interessa solo lanciare dei programmi a determinati
intervalli di tempo, e se è tutto qui, non vedo il motivo di installare un
web server, poi di installare apache, ecc ecc.
non li devo installare, li ho già installati per altre ragioni, quindi
veniva comodo sfruttarli.
Post by rob4you
Come se non bastasse, considera che dovrest, tra l'altro, modificare le
impostazioni di configurazione del php.ini, dal momento che un'attesa di
mezz'ora è veramente tanto! L'esecuzione andrebbe in timeout (di default ci
va già dopo trenta secondi, pensa tu!!).
ho iniziato lo scriptcon un bel

set_time_limit(0);

così da risolvere almeno questo problema :)
Post by rob4you
Secondo me puoi provare a esporre il tuo problema direttamente a dei ng di
windows.
se non trovo altra soluzione farò così, ma la cosa mi smebra unpo' ridicola.
grazie e ciao
rob4you
2006-07-22 13:26:30 UTC
Permalink
Post by rob4you
Secondo me puoi provare a esporre il tuo problema direttamente a dei ng di
windows.
Per iniziare (e direi anche finire...):

Per creare una wait in un file batch, esistono vari modi.
Ad esempio prova a usare l'eseguibile già fatto sleep.exe, che puoi
scaricare da:
http://www.computerhope.com/dutil.htm

Oppure, un alternativa è usare le seguenti righe di codice:
@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul
che puoi controllare dal sito: http://malektips.com/dos0017.html

Se avessi Windows 2003, esisterebbe gia embedded la funzione sleep.

Oppure, se vuoi altre righe di codie, le puoi trovare su:
http://www.computerhope.com/rdebug.htm#8 (CREATE A SLEEP FILE)

Risolto il problema dello sleeping, puoi intervallare semplicemente le
chiamate ai tuoi programmi, nel modo che desideri (la sintassi è molto
semplice, e trovi una marea di tutorial su internet, il primo che mi è
capitato sotto gli occhi: http://www.computerhope.com/batch.htm).

Salvi il tutto con estensione .bat, la metti in esecuzione automatica, e
così, all'avvio, saranno eseguite le operazioni che desideri.
Tutto ciò se vuoi creare un file batch.

Se invece vuoi crearti un eseguibile, ad esempio in linguaggio C, è
ugualmente abbastanza semplice, basta leggerti qualche manuale per trovare
tutto l'occorrente.

ciao,
facci sapere come va,

rob4you
www.outofmind.eu
ValeRyo Saeba
2006-07-22 16:01:24 UTC
Permalink
Post by Ubu re
Ciao wfkladsfjm e rob,
mi domando, ma a cosa può essere utile sleep()?
se si lancia uno script da cron?
a fare incupire gli utenti?
Ho un daemon che verifica con LISTEN su pgSQL se ci
sono modifiche su un database.
Ovviamente non mi serve che faccia controlli a raffica, allora
listen -> nulla da fare -> sleep 60 secondi ->a capo

Se non ci fosse lo sleep avrei 1000 LISTEN al secondo,
con grande gioia del database server che questi comandi
li deve gestire :-)
--
ValeRyo
Ubu re
2006-07-22 17:00:26 UTC
Permalink
ho capito, è un istruzione utile in certe attività d'amministrazione,
oppure in script lanciati da crontab o al primo avvio, ma non è utile
nelle normali pagine a meno che si abbia interesse a far incupire gli
utenti.

Ciao.
rob4you
2006-07-22 17:42:29 UTC
Permalink
Post by Ubu re
ho capito, è un istruzione utile in certe attività d'amministrazione,
oppure in script lanciati da crontab o al primo avvio, ma non è utile
nelle normali pagine a meno che si abbia interesse a far incupire gli
utenti.
Secondo questa teoria, *tutto e niente* potrebbe essere utile/inutile in
php, o in qualsiasi altro linguaggio di programmazione.
L'utilità di una funzione è ovviamente nulla fino al momento in cui non
trovo un appropriato uso da farne.

rob4you
(www.outofmind.eu)
Ubu re
2006-07-22 18:59:06 UTC
Permalink
Post by rob4you
Post by Ubu re
ho capito, è un istruzione utile in certe attività d'amministrazione,
oppure in script lanciati da crontab o al primo avvio, ma non è utile
nelle normali pagine a meno che si abbia interesse a far incupire gli
utenti.
Secondo questa teoria, *tutto e niente* potrebbe essere utile/inutile in
php, o in qualsiasi altro linguaggio di programmazione.
L'utilità di una funzione è ovviamente nulla fino al momento in cui non
trovo un appropriato uso da farne.
rob4you
(www.outofmind.eu)
non è vero, perché mentre in linguaggi che supportano il
multithreading fa comodo *sempre* poter mettere un thread in sleep, in
php no (ne hai uno), a meno ché siano script per compiti di routine.
Mi sono spiegato?

Ciao
rob4you
2006-07-22 19:18:10 UTC
Permalink
Post by Ubu re
Post by rob4you
Secondo questa teoria, *tutto e niente* potrebbe essere utile/inutile in
php, o in qualsiasi altro linguaggio di programmazione.
L'utilità di una funzione è ovviamente nulla fino al momento in cui non
trovo un appropriato uso da farne.
non è vero, perché mentre in linguaggi che supportano il
multithreading fa comodo *sempre* poter mettere un thread in sleep, in
php no (ne hai uno), a meno ché siano script per compiti di routine.
Mi sono spiegato?
OK, è il tuo modo di vedere la cosa. Non capisco bene cosa intendi con
"compiti di routine", o con "normali pagine", fatto sta che torno a ripetere
che qualsiasi funzione, di per sé ha un'utilità pari a zero, ma nel momento
in cui ti si presenta un problema particolare, se quella funzione diventa
risolutiva, la sua utilità è quasi "vitale".

Ma alla fine.....stiamo facendo "metafisica" sul php, quindi magari dovremmo
cambiare newsgroup: it.comp.filosophy.php ;-)

rob4you
ValeRyo Saeba
2006-07-23 10:51:51 UTC
Permalink
Post by Ubu re
ho capito, è un istruzione utile in certe attività d'amministrazione,
oppure in script lanciati da crontab o al primo avvio, ma non è utile
nelle normali pagine a meno che si abbia interesse a far incupire gli
utenti.
Non hai vinto, ritenta :-)
Prima di mandare un output binario (es: un pdf generato al volo) ho
scoperto che alcune versioni di explorer gradiscono uno sleep(1);
per digerire meglio il content-disposition.

Mi associo alla definizione di rob4you: tutte le funzioni sono inutili
finché non servono! (ah, Lapalisse...)
--
ValeRyo
Loading...