Newsgroup: it.comp.www.php
Titolo: Lancio di una lunga elaborazione

(Web-application sulla intranet aziendale in PHP)
L'utente lancia una lunga elaborazione.
E' possibile dare qualche riscontro sul browser del suo avanzamento? 
(Anche in forma grezza, l'importante e' avere a video qualcosa che si 
muove e non un buco nero fino al termine dell'elaborazione)
Se proprio non e' possibile, visto che l'elaborazione puo' durare 
diversi minuti, come evito il timeout del browser ?
Come posso permettere ai miei utenti di interrompere l'elaborazione PHP 
che hanno lanciato loro stessi ?
Io non ho proprio idea di come fare.
Aiuuuuuutooo mi sono arenato.
Grazie & Ciao
Marco

muove e non un buco nero fino al termine dell'elaborazione)
Ci sono due sistemi, che io sappia.
Il primo consiste nel riuscire a ridurre l'elaborazione in blocchi piu'
piccoli del limite di timeout, e riuscire a numerarli. A quel punto fai
un blocco e mandi un refresh, o un javascript, per passare al prossimo;
le variabili che ti servono le salvi nella sessione.
Non e' detto che ci si possa riuscire facilmente, dipende dal calcolo.
Un'altra possibilita', forse meno portabile, e' non fare l'elaborazione
dalla pagina web. Questa segnala a un processo (crontab o altro) i dati
necessari e il fatto che ha da cominciare; ed il processo parte in modo
indipendente, salvando su un file il proprio stato di avanzamento. Devi
usare il PHP a linea di comando, o puoi usare lynx (anche per Windows),
dicendo a browser e script di non andare in timeout.
Nella pagina "di controllo" verifichi lo stato leggendo il file, e puoi
mandare i segnali di interruzione con un altro file. Quando hai finito,
leggi il risultato (es.: /processi/0192834.stat, /processi/0192834.html
e /processi/0192834.kill; la pagina monitor deve portarsi dietro solo i
dati di autorizzazione e il numero 0192834).
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 L'utente lancia una lunga elaborazione.
[cut]
Dovrebbe essere possibile bufferizzare l'output e inviarlo a blocchi di 
256 byte (se non ricordo male) verso il browser.
Prova a dare un'occhiata alle funzioni per il controllo dell'output.
http://it.php.net/manual/it/ref.outcontrol.php
In particolare la documentazione per la funzione flush() porta alcuni 
esempi e commenti interessanti.
-- 
Spoken: How much is that gorilla in the window?
Take our advice, At any price, A gorilla like Magilla is mighty nice.
Gorilla, Magilla Gorilla for sale

Accidenti!!!!
E' maledettamente complesso.
E' tutto il giorno che ci sono sopra e ho pensato che usero' la funzione 
javascript xmlHttpRequest che permette di lanciare una richiesta HTTP 
(quindi lanciare la mia elaborazione PHP) e di leggerne la risposta in 
una variabile JS, senza quindi dover caricare una nuova pagina.
http://developer.apple.com/internet/webcontent/xmlhttpreq.html
Qui una illuminante spiegazione di xmlHttpRequest (l'esempio e' DA 
PROVARE!!!)
Il bello e' che la xmlHttpRequest puo' anche essere asincrona, quindi tu 
lanci la request e quando arrivano dati ti scatena l'evento 
onreadystatechange() permettendoti di leggerli e di visualizzarli sulla 
pagina. Questo risolve il problema del vedere l'avanzamento sul browser.
Per interrompere l'elaborazione invece, esiste il metodo abort(), che 
interrompe il flusso dal server. Spero non interrompa l'elaborazione PHP 
in un modo troppo brusco perche' devo rilasciare certi lock.
Il metodo abort() lo devo ancora guardare bene ma mi sembra promettente. 
Se non dovesse andare bene, usero' il sistema di segnaletica tramite 
file che hai suggerito tu.
E' una soluzione un po' complessa ma non astrusa. O no?
A me piace questa tecnica perche' avvicina la programmazione web a 
quella tradizionale dove mi sento piu' a mio agio.
Ciao
Marco


 esempi e commenti interessanti.
Ciao Magilla, grazie per la dritta. Non conoscevo le funzioni ob_ (sono 
alle prime con PHP) e mi saranno molto utili.
Con la flush posso mandare al browser l'avanzamento dell'elaborazione 
che ho pensato di catturare mediante l'oggetto xmlHttpRequest del 
javascript.
Nella risp a Leonardo ho aggiunto i dettagli della soluzione che ho 
pensato,... se hai qualche consiglio :-)
Ciao & Grazie
Marco


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 addirittura portabile (una rarita'!)... 
 > Ora me la studio; grazie e a buon rendere :-)
Mi fa piacere se ti e' utile, me l'ha presentata Setec. ;-)
Ciao
Marco

Mi fa piacere se ti e' utile, me l'ha presentata Setec. ;-)
Ora, perche' questo non mi stupisce? :-)
