Newsgroup: it.comp.lang.perl
Titolo: exec/system e output

Salve,
non sono affatto pratico di perl e cosě vi chiedo un piccolo aiuto.
Avrei bisogno di visualizzare da un script perl cgi l'output di una pagina 
php.
Sto provando con qualcosa dal genere ma non sono ancora riuscito nel mio 
intento.
exec "/usr/bin/php $nomefilephp"
oppure
system "/usr/bin/php $nomefilephp"
Suggerimenti ?
-- 
Riccardo 

 system "/usr/bin/php $nomefilephp"
Ho provato anche cosě
$output = `/usr/bin/php -i`;
print $output;
ma niente da fare... non ha funzionato...
nella pagina html mi viene mostrato il codice dello script perl cgi.
-- 
Riccardo 

 php.
La tua formulazione della domanda lascia intendere la presenza
di un server da qualche parte (in questo caso, sulla stessa 
macchina su cui lo script Perl viene eseguito), dotato di modulo PHP, 
che restituisce pagine dinamiche. Una strada per risolvere il tuo
problema potrebbe essere, quindi, l'uso di LWP::Simple.
    use LWP::Simple;
    $contenuto = get( $url_della_pagina_PHP );
e poi potresti usare qualche modulo di HTML::* per fare il parsing
di $contenuto. E cosi` via...
ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org
mailto:
lar...@perl.it
   |  
http://www.perl.it

 di $contenuto. E cosi` via...
Beh, grazie è una buona idea anche se sinceramente non credo faccia
al mio caso anche perchè devo all'interno di questo script PHP mi serve
recuperare l'output php di più di un file.
Comunque ho provato la tua soluzione ma non mi ha funzionato cmq.
Grazie cmq per tutti i suggerimenti...
Proverò a continuare a sbatterci un po' provando ad usare i backtick
magari tenendo in considerazione la possibilità di dover redirezionare
l'output come segue:
print ``/usr/bin/php -f /path_pagina_php/pagina.php 2>&1`;
Speriamo in qualche dritta di quelle giuste.
--
Riccardo

 recuperare l'output php di piů di un file.
All'interno "di questo script PHP" ? Se si tratta di un refuso
e intendevi in realta` "di questo script Perl", allora non ci 
sono problemi, a parte eventualmente il maggior carico del 
server.


 server.
Infatto, intendevo dire "di questo script Perl".
Ciao e Grazie ancora.
--

 In che senso ???
Perche` in un altro post hai detto che cercando di eseguire lo
script CGI nel browser veniva mostrato il sorgente del file, 
anziche` il risultato della sua esecuzione. Pero`, se sul 
server esistono gia` script funzionanti, direi che nemmeno 
questo e` il problema.


 questo e` il problema.
Adesso ho capito perchè pensavi dipendesse da una mancata
interpretazione da parte del server degli script perl.
Comunque ti confermo che il server è configurato correttamente
ed è in grado di eseguire senza alcun problema sia gli script perl
sia gli script php.
Spero di riuscire a risolvere perchè sono convinto che mi manca
un "niente" per giungere alla soluzione...
Potresti dare un'occhiata anche al mio post
"backtick per output php" ?
Grazie.
Ciao
--
Riccardo

 Suggerimenti ?
open PIPE,"|/bin/ls -la";
while ($str = <PIPE>) {print $str,"\n";}
Preferisco SEMPRE questa soluzione perche':
1) posso controllare il flusso di input e anche anticipare la chiusura
   del pipe.
2) se uso output non bufferizzato l' output di system non sara' allineato.
tanti altri motivi anche stilistici, oltretutto e' un modo piu' generale.
la PIPE puo' essere anche aperta in scrittura di STDIN.
perldoc -f open  # da leggere t utto fino in fondo.
se in altri casi ti interessa controllare interamente il processo chiamante
perldoc perlipc
.....
       Here's an example of using open2():
           use FileHandle;
           use IPC::Open2;
           $pid = open2(*Reader, *Writer, "cat -u -n" );
           print Writer "stuff\n";
           $got = <Reader>;
.....
open2 e' una funzione di alto livello, volendo realizzabile in modo
classico con pipe() + fork() + exec() e infatti nella stessa documentazione
poco piu' avanti trovi:
Bidirectional Communication with Yourself
che e' la cosa piu' interessante (e meno pratica, ma e' la mia preferita)
Ciao.
Roberto
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 open PIPE,"|/bin/ls -la";
mi viene visualizzato il codice sorgente perl ???
Grazie a tutti.
-- 
Riccardo

 Grazie a tutti.
Roba da Harakiri!! E' Chiaro che il problema e' sistemistico lato server.
Ne hai accesso a una shell di comandi? Eseguire lo script a mano??
Se httpd e'? Apache? Forse e' un problema di configurazione del modulo
mod_php che esegue l' interprete PHP built-in appena vede contenuto il
path /usr/bin/php.
a esebuire semplicemente lo script perl 
print "/usr/bin/php -i";
oppure
$interprete = "/usr/bin/php -i";
cioe' solo il pretesto di far apparire la stringa.
se al momento del parsing l' httpserver con mod_php attivo crede
di interpretarlo come php e non come perl, il sorgente viene presentato
come una pag. html con php incorporato.
Altro sporco trucco per aggirare il parsing php:
#!/usr/bin/perl
$primopezzointerprete = "/usr/bin/p";
$secondopezzointerprete = "hp -i";
$interprete = $primopezzointerprete . $secondopezzointerprete;
print "Content-type: text/htmlnn";
open PIPE,"|$interprete";
while ($str = <PIPE>) {print $str,"n";}
tanto per fare due risate :)
ciao.
Roberto.


Grazie a tuttu per tutti i preziosi suggerimenti.
Alla fine ho risolto.
Il problema era che in quel serve esistevano due interpreti php.
/usr/bin/php
/usr/local/bin/php
Quello giusto era "/usr/local/bin/php" ma io mandavo in esecuzione 
"/usr/bin/php".
-- 
Riccardo