Newsgroup: it.comp.www.php
Titolo: Problema caratteri eseguiti da shell

Su io eseguo uno script PHP da shell alcuni caratteri potrebbero non essere
compresi...o meglio
Se io eseguo questo:
$filePdf="file_exists('/Users/ispooky83/Desktop')";
$i=1;
while ($i=="1") {
    sleep(2);
   if ($filePdf){
        echo " e PRESENTI  IL FILES";
           break;
   }else{
        echo "\n\n\nNON ESISTE\n\n\n";
    }
} 
Lo script esce subito dal ciclo...quindi mi da una risposta errata.
Se io invece eseguo lo stesso script con l'UNICA DIFFERENZA nelL'
espressione del blocco if che scrivo la stringa completa il programma viene
eseguito correttamente.
$i=1;
while ($i=="1") {
    sleep(2);
   if ( file_exists('/Users/ispooky83/Desktop')){
        echo "e PRESENTI  IL FILES\n\n\n";
           break;
   }else{
        echo "\n\n\nNON ESISTE\n\n\n";
    }
}
ORA IPOTIZZO CHE CI SIA QUALCHE CARATTERE CHE DIA FASTIDIO...come posso fare
per eliminare questo problema??
Ciao grazie

 
Scusa ma $filePdf č una stringa che contiene 
["file_exists('/Users/ispooky83/Desktop')"]
mi sembra giusto che esca subito!
	Francesco

 Ciao grazie
Prego.
David
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<

 Francesco
Be SI č una stringa non va bene???
Come risolvo??
Il fatto č che non so come altro fare visto che $filePdf viene creato
dinamicamente...
foreach($pdf as $chiave => $valore) {
                $filePdf .="file_exists('$pathOut$valore') AND ";
            }
            $filePdf= substr("$filePdf", 0, -5);
Quindi $filePdf conterra
file_exists('/Users/ispooky83/Desktop/1.pdf') AND
file_exists('/Users/ispooky83/Desktop/2.pdf') AND
file_exists('/Users/ispooky83/Desktop/3.pdf')
C'č un altro modo??
Grazie...anche per la pazienza

 Grazie...anche per la pazienza
Prego,


 
In effetti credo che il problema sia il fatto che non ho messo
eval($stringa).
Purtroppo pero mi da l'errore
Parse error: syntax error, unexpected $end in
/usr/local/apache2/test/prova.php(34) : eval()'d code on line 1
Cosa sbaglio??

 /usr/local/apache2/test/prova.php(34) : eval()'d code on line 1
Ecco, non era testato :)
$pdf = array("1", "2", "3", ...);
$test = "";
foreach($pdf as $file) {
	$test .= "file_exists('$file') && ";
}
// eliminiamo l'ultimo " && "...
$test = substr($test, 0, -4);
$stringa = "return ($test) ? true : false;";
if (eval($stringa)) {
	echo "i file esistono\n";
} else {
	echo "uno dei file non esiste\n";
}
Questa volta è testato.
Saluti,


Hai ragione...ora funziona proprio...
Ora vorrei capire: cos'è questo
$stringa = "return ($test) ? true : false;";
??
Grazie mille
Luca

 Luca


 
OK...tutto bene...ora un ultima cosa
Nel php, per eseguire lo script faccio
exec("./prova.php ".$argv[v].");
Il comando funziona alla perfezione, l'unica pecca è il fatto che lo script
viene eseguito in append quindi il browser rimane "appeso" fino a quando il
processo in exec non è terminato...
è possibile eseguirlo in BACKGROUND??
GRAZIE TANTE
ciao

 è possibile eseguirlo in BACKGROUND??
Ma non è la domanda del tuo altro thread?
Comunque puoi provare a mettere un & alla fine... ma non so come si
potrebbe comportare php.
exec("./prova.php " . $argv[v] . " &");


 
Ci ho provato ma nulla da fare...lo mette cmq un append...come č possibile??

 
Io non utilizzerei eval, ti complichi la vita per niente e il codice 
diventa illeggibile! Se i file l'hai nell'array, scorri l'array con un 
foreach e ogni volta controlli l'esistenza del file i-esimo.
Per l'esecuzione in bg , io ho sempre utilizzato & senza problemi e il 
problema esguito, almeno su RHEL non resta collegato a nessun padre.
Un ultima cosa, nell'exec metti sempre il programma che deve eseguire lo 
script exec("/bin/php /home/pippo/script.php &");
	Francesco

     Francesco
Cheers,


 
Niente ragazzi...noeanche nohup funzia... Quello che faccio č
exec("nohup ./prova.php " . $argv[v] . " &");
e niente...il browser mi rimane cmq appeso.
Pero in effetti eseguendo la stringa direttamente da bash diciamo che
funzioni o meglio scrive "[1] 1248"  e questo " sending output to nohup.out"
in cui c'č l'output corretto dello script.
ciao

 exec("nohup ./prova.php " . $argv[v] . " &");
Eh?!
Prova:
exec("/usr/bin/nohup /usr/bin/php -f prova.php " . $argv[v]);
A parte che poi $argv[v] non significa nulla... che è v?! Una variabile
non è (sarebbe $v altrimenti), quindi non può essere un indice, un
valore, una chiave, nulla... Controlla!


 David
Luca

 ".$valori." &");   
Oddio, di nuovo.
Ma allora non mi segui proprio. Oppure non leggi quello che scrivo.
O USI "&" O USI "NOHUP"!
Secondo: io nell'esempio ho scritto i path completi. Vuoi provare una
volta a piazzare l'esempio che ti do io?!
exec("/usr/bin/nohup /usr/bin/php -f avvia.php $dirDestOut $dirint " .
count($arrId) . " $valori");
oppure, dato che ho capito che avvia.php è eseguibile (controlla!):
exec("/usr/bin/nohup ./avvia.php $dirDestOut $dirint " . count($arrId) .
" $valori");


 David
Luca

 Ma com'è possibile...????
Una risposta sincera: boh.
Analizziamo il problema "al contrario": cosa devi fare? Perché devi
eseguire un file esterno?
Saluti


 eseguire un file esterno?
Il file avvia.php è questo
$pathOut=$argv[1];
$pathNativo=$argv[2]."/UserDefinedFolders/PDF/";
$pdf=array();      
for ($x=4;$x<=($argv[3]+3);$x++){
        $pdf[]=$argv[$x].".pdf";
    }
foreach($pdf as $chiave => $valore) {
                $filePdf .="file_exists('$pathOut$valore') && ";
            }
            $filePdf= substr("$filePdf", 0, -4);
$stringa = "return ($filePdf) ? true : false;";
$i=1;
while ($i=="1") {
    sleep(5);
           if (eval($stringa)){
//   echo "SONO PRESENTI TUTTI I FILES\n\n\n";
           foreach($pdf as $chiave => $valore){
               exec("cp -r -f -p $pathOut$valore $pathNativo$nome");
//Restituisce l'ora attuale
    $nowDate=date("Ymt_His");
//Aggiorno lo status id a 2 cioè che è stato copiato nella cartella IN
            $ins="UPDATE `arc_pdf` SET `arc_pdf_data_status3` =
'$nowDate',`arc_pdf_rif_id_status` = '3' WHERE `arc_pdf_nome`='$nome'";
            $query_ins=mysql_query($ins) or die ("Impossibile completare
l'inserimento...2");
            }
//        echo "File uplodato";
           break;
   }
}
In sostanza non fa nient'altro che controllare la presenza di 1 o + file
all'interno di una cartella. Una volta che ci sono, li copia da una parte ed
esce.Niente di cosi complicato...e lo script funziona anche
correttamente...l'unica pecca è l'append...il browser gira fin quando non
finisce il processo avvia.php.
Dici che nn c'è un modo per aggirare il problema??
Ciao
grazie  



e niente...il browser mi rimane cmq appeso.
E' una "feature" nota. L'unica cosa che puoi fare e' usare "at":
	exec("echo '$comandi' | at now");
...in questo caso l'output arriva in mail all'utente di Apache.
Leonardo
-- 
Geordie - he's a man, there's little doot about't,
He's done all he can, wha' can do withoot't?
Doon there cam a blade, linkin' like me lordie,
He wad drive a trade, a' the loom of Geordie.

 Leonardo
Luca

> Dici che nn c'è un modo per aggirare il problema??
Provato a eseguire il comando in background (con &) e 
contemporaneamente redirezionare lo stdout con > ?
--
rob4you

 
Non risolve il problema, ma ti abbiamo piů volte suggerito il path 
completo dell'interprete e dello script.
	Francesco

| at now");
Non e' quello che t'avevo detto io ;-) - manca "echo"... che e' proprio
la sintassi per far funzionare at. Sempre se e' installato.
	error_reporting(E_ALL);
	$FULL_PATH = "Riempi FULL_PATH. Se non lo fai, o lo ignori, non
funziona";
	$cnt	= count($arrId);
	$comandi = "$FULL_PATH/avvia.php $dirDestOut $dirint $cnt
$valori";
	$comandi = AddSlashes($comandi);
	shell_exec("echo '$comandi' | at now 2>&1");
