Newsgroup: it.comp.lang.perl
Titolo: CGI, dubbio atroce...

Ciao a tutti, ho necessità di lavorare con CGI ed ho il seguente problema
(spero di essere chiaro):
il mio flusso di dati va in questo modo:
file.dat => file.html => file.txt
            ^ ^
 
script1.pl
 
script2.pl
ovvero uno 
script1.pl
 legge un file di dati e ne elabora una pagina HTML. un
secondo script dovrebbe da questa pagina estrarre alcune informazioni e
metterle in un file di testo.
Ora, per vedere la pagina HTML io devo inserire un indirizzo nel browser del
tipo:
http://indirizzo.web.server/cgi/script1.pl?file=file.dat
e lo 
script1.pl
 legge il file e visualizza sul browser la pagina web.
Da questa pagina vorrei aggiungere un link allo 
script2.pl
 che dovrebbe
elaborare la pagina che si sta visualizzando. E qui mi nascono i dubbi:
- lo script2 avrà in input un file html oppure riceverà il codice dello
script1?
- se entrambe le cose sono possibili, come faccio a fargli passare in input
la pagina HTML che sto visualizzando?
La soluzione estrema potrebbe essere semplicemente fare salvare la pagina
come file.html e poi ricaricarlo ma non so se sia la soluzione migliore (e
più intelligente...).
Grazie davvero a chi vorrà aiutarmi (ma anche a chi solo ha letto!)
dawe
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Ok, ho risolto da solo.
Ho usato, per la cronaca, un trucco. Il secondo script usa ora LWP per
caricare la pagina creata dal primo e poi mette i risultati in un apposito
array, in questo modo č come se avesse avuto accesso alla pagina HTML.
Ora perņ ho un nuovo problema...
visto che il secondo script stampa a STDOUT delle righe durante la sua
esecuzione, come faccio a visualizzare queste righe?
Ora come ora, infatti, quando tento di accedere alla pagina creata con il
secondo script, essa viene visualizzata solo DOPO che lo script abbia fatto
tutte le sue elaborazioni...
Grazie ancora


 writes:
dawe> Ciao a tutti, ho necessità di lavorare con CGI ed ho il seguente
dawe> problema (spero di essere chiaro): il mio flusso di dati va in
dawe> questo modo:
dawe> file.dat => file.html => file.txt ^ ^ 
script1.pl
 
script2.pl
dawe> ovvero uno 
script1.pl
 legge un file di dati e ne elabora una
dawe> pagina HTML. un secondo script dovrebbe da questa pagina
dawe> estrarre alcune informazioni e metterle in un file di testo.
dawe> Ora, per vedere la pagina HTML io devo inserire un indirizzo nel
dawe> browser del tipo:
dawe> 
http://indirizzo.web.server/cgi/script1.pl?file=file.dat
dawe> e lo 
script1.pl
 legge il file e visualizza sul browser la pagina
dawe> web.  Da questa pagina vorrei aggiungere un link allo 
script2.pl
dawe> che dovrebbe elaborare la pagina che si sta visualizzando. E qui
dawe> mi nascono i dubbi: - lo script2 avrà in input un file html
dawe> oppure riceverà il codice dello script1?  - se entrambe le cose
dawe> sono possibili, come faccio a fargli passare in input la pagina
dawe> HTML che sto visualizzando?  La soluzione estrema potrebbe
dawe> essere semplicemente fare salvare la pagina come file.html e poi
dawe> ricaricarlo ma non so se sia la soluzione migliore (e più
dawe> intelligente...).
dawe> Grazie davvero a chi vorrà aiutarmi (ma anche a chi solo ha
dawe> letto!)
dawe> dawe
ho visto amche l'altra tua mail in cui dicevi di aver "risolto" con LWP,
ma e` una soluzione pessima... (perche` carichi non solo il (mod_)?perl,
ma anche il server web facendogli ripetere due volte la stessa
operazione, per poi effettuare il filtro.
In generale in modo tradizionale sembra meglio creare una directory
di cache accessibile con URL e crei il file la prima volta che
hai/crei i dati in cui salvare i file.txt (secondo passaggio).
opure se sei sicuro che il passaggio alla versione .txt
e` conseguente alla vista HTML, una risposta mime multiple parallela
con qualcosa tipo:
,--------------------------------------------------------------------
| Content-Type: multipart/parallel; boundary="--.-.-._.._.---"
|
| ----.-.-._.._.---
| Content-Type: text/html
| Content-Disposition: inline
| 
| <html><body>
| funziona? <b>bold</b>
| contenuto html ottenuto con file1
| <!-- multipart template by mar (
http://mar.i.am
) -->
| </html></body>
| 
| ----.-.-._.._.---
| Content-Type: text/plain
| Content-Disposition: attachment; filename=file.txt
| 
| contenuto file.txt ottenibile con `
script2.pl
` o meglio un suo eval
| ----.-.-._.._.-----
`--------------------------------------------------------------------
chi lo provera' copi esattamente il boundary e possibilmente lasci
nell'html almeno come commento l'informazione di template come nell'eempio.
Nota: Ho inserito una cornice che occupa anche le prime due colonne (i primi
due caratteri delle righe) per non confondere NNTP
potrebbe funzionare in modo diverso con diversi browser (client),
io l'ho pensato ma non l'ho provato.
Saluti,
MAR     
http://mar.i.am/
-- 
x(t),y(t) = th(3t-34.5)*e^[-(3t-34.5)^2]/2-4.3+e^(-1.8/t^2)/(.8*atg(t-
3)+2)(t-1.8)-.3th(5t-42.5),(1.4e^[-(3t-34.5)^2]+1-sgn[|t-8.5|-.5]*1.5*
|sin(pi*t)|^[2e^(-(t-11.5)^2)+.5+e^(-(.6t-3.3)^2)])/(.5+t)+1  ; 0<t<14

 writes:
dawe> Ciao a tutti, ho necessità di lavorare con CGI ed ho il seguente
dawe> problema (spero di essere chiaro): il mio flusso di dati va in
dawe> questo modo:
dawe> file.dat => file.html => file.txt ^ ^ 
script1.pl
 
script2.pl
dawe> ovvero uno 
script1.pl
 legge un file di dati e ne elabora una
dawe> pagina HTML. un secondo script dovrebbe da questa pagina
dawe> estrarre alcune informazioni e metterle in un file di testo.
dawe> Ora, per vedere la pagina HTML io devo inserire un indirizzo nel
dawe> browser del tipo:
dawe> 
http://indirizzo.web.server/cgi/script1.pl?file=file.dat
dawe> e lo 
script1.pl
 legge il file e visualizza sul browser la pagina
dawe> web.  Da questa pagina vorrei aggiungere un link allo 
script2.pl
dawe> che dovrebbe elaborare la pagina che si sta visualizzando. E qui
dawe> mi nascono i dubbi: - lo script2 avrà in input un file html
dawe> oppure riceverà il codice dello script1?  - se entrambe le cose
dawe> sono possibili, come faccio a fargli passare in input la pagina
dawe> HTML che sto visualizzando?  La soluzione estrema potrebbe
dawe> essere semplicemente fare salvare la pagina come file.html e poi
dawe> ricaricarlo ma non so se sia la soluzione migliore (e più
dawe> intelligente...).
dawe> Grazie davvero a chi vorrà aiutarmi (ma anche a chi solo ha
dawe> letto!)
dawe> dawe
ho visto amche l'altra tua news in cui dicevi di aver "risolto" con LWP,
ma come "soluzione" e` talmente pessima da essere abbastanza insensata:
ti carica non solo il (mod_)?perl ma anche il server web facendogli
ripetere due volte la stessa operazione, per poi filtrare i dati
scomodando anche lo stack TCP in loopback.
In generale in modo tradizionale sembra meglio creare una directory
di cache accessibile staticamente con indirizzo URL, directory dove
metti il file.txt che crei se ha mtime (v. perlfunc fstat())
minore di quello sorgente dell'elaborazione (file.dat) e pubblichi
sempolicemente il link al file della cache.
Quindi farai l'elaborazione (basata su un require 
script2.pl
)
quando e` in memoria l'output dell'elaborazione di file.dat (
script1.pl
).
Io mi chiedo quanto meglio funzionerebbe tutto se le persone
facessero da _subito_ la soluzione migliore: e` anche la piu` semplice
e la piu` logica.
Un'altra idea del tutto originale, valida se il passaggio alla
versione .txt e` sempre conseguente alla vista HTML, e` dare
una risposta da lato server di tipo multipart parall secondo
lo standard MIME anziche` la solita "Content-type: text/html"
(parole che molti scrivono meccanicamente senza chiedersi cosa significano).
un esempio di content type multipart/parallel e` il seguente
,--------------------------------------------------------------------
| Content-Type: multipart/parallel; boundary="--.-.-._.._.---"
|
| ----.-.-._.._.---
| Content-Type: text/html
| Content-Disposition: inline
| 
| <html><body>
| funziona? <b>bold</b>
| contenuto html ottenuto con file1
| <!-- multipart template by mar (
http://mar.i.am
) -->
| </html></body>
| 
| ----.-.-._.._.---
| Content-Type: text/plain
| Content-Disposition: attachment; filename=file.txt
| 
| contenuto file.txt ottenibile con `
script2.pl
` o meglio un suo eval
| ----.-.-._.._.-----
`--------------------------------------------------------------------
Nota:  per non confondere NNTP, ho inserito una cornice che occupa
  anche le prime due colonne (cioe` i primi due caratteri delle righe incluse)
chi lo provera' copi esattamente il boundary e possibilmente lasci
nell'html almeno come commento l'informazione di template come nell'eempio.
potrebbe funzionare in modo diverso con diversi browser (client),



Credo di non avere capito nulla di quello che scrivi, scusami tanto, ma sono
una capra!
Ne consegue che non ho provato il codice da te proposto...
In alternativa mi basterebbe sapere come fare in modo che cliccando su un
link venga salvata sul server la pagina che sto visualizzando (che so,
tempFile.html) e poi venga aperta una nuova finestra con il link allo
script2 (che ha come argomento il file salvato sul server).
ciao 
dawe
 
-- 
per rispondere via e-mail, togli LE_MANI_DALLA_TASTIERA