Newsgroup: it.comp.www.php
Titolo: Ottenere l'output di system

Ciao a tutti,
devo ottenere, con un semplice script, l'output fornito da passthru
(analoga funzione di system() ). In particolare vorrei ottenere
l'output di
 passthru("java net.sf.saxon.Transform -s:s.xml -xsl:s.xsl -o:./
xmloutput");
Quindi non faccio altro che eseguire un programma java (attraverso la
classe Transform).
Il problema è che non vengono intercettate le stampe a video della
classe Transform ma solo quelle di java. Mi spiego meglio, se la
classe Transform stampasse a video la scritta "ciao" alla sua
esecuzione, questa non verrebbe intercettata da passthru. Se invece
commettessi degli errori a richiamare l'applicazione java invece tali
informazioni verrebbero catturate da passthru.
Ho pensato di scrivere l'output di java net.sf.saxon.Transform -
s:s.xml -xsl:s.xsl -o:./xmloutput in un file report.txt per poi aprire
tale file e mostrarlo con php in una pagina html
Il file report.txt andrebbe scritto banalmente con java
net.sf.saxon.Transform -s:s.xml -xsl:s.xsl -o:./xmloutput > report.txt
Però tale soluzione mi sembra poco elegante.
Qualcuno può suggerirmi come risolvere questo problema?
Grazie
ps
non utilizzo PHP/JavaBridge apposta

 xmloutput");
Puoi provare con proc_open() etc.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

esecuzione, questa non verrebbe intercettata da passthru.
Forse non scrive su stdout ma su stderr? In questo caso
	$output = shell_exec("$command 2>1");
dovrebbe funzionare (almeno... funziona su Linux).
Leonardo
-- 
IN NO EVENT SHALL MICROSOFT [] BE LIABLE FOR [] FAILURE TO MEET ANY DUTY
INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE [] EVEN IN
THE EVENT OF [] BREACH OF CONTRACT OR BREACH OF WARRANTY OF MICROSOFT...
                              -- EULA di Windows Media VCM 9, articolo 8

 dovrebbe funzionare (almeno... funziona su Linux).
effettivamente potrebbe stampare su stderr. Ho provato il tuo
suggerimento (su un server con Debian) , ma ancora non vedo nulla :-(

> Forse non scrive su stdout ma su stderr? In questo caso


Se passthru() funziona, da qualche parte scrive. Passthru prende solo
stdout e stderr.
D'altra parte forse java non interagisce bene con la shell.
Prova a usare $res = exec(...) e mostrare a video implode('', $res);


> Prova a usare $res = exec(...) e mostrare a video implode('', $res);
niente...non va.
Mi dice che il secondo parametro (probabilmente) di implode è errato.
Warning: implode() [function.implode]: Bad arguments. in /var/www/
apache2-default/XSLT/transform2.php on line 5
Il codice che ho scritto è il seguente:
$res = exec("java net.sf.saxon.Transform -s:s.xml -xsl:s.xsl -
o:.output.xml");
implode('', $res);

niente...non va.
Ho sbagliato sintassi, tanto per cambiare.
	exec($command, $res);
	$output = implode("\r\n", $res); // o forse ("", $res)



niente...non va proprio :-(


magari può servire a qualcuno in futuro.....
ho risolto così: riesco a cattuarare sia stdout che stderr con gli
operatori >&, scrivo su un file e quindi visualizzo quest'ultimo. Ecco
il codice
<?php
    passthru("java net.sf.saxon.Transform -s:s.xml -xsl:s2.xsl -o:./
XMLoutput/Corso.xml >& ./XMLoutput/log.txt", $retval);
    echo readfile("./XMLoutput/log.txt");
?>