Newsgroup: it.comp.www.php
Titolo: Exec() o...?

Ciao a tutti. Mi presento sono Giorgia 28 anni. Chiedo aiuto.
Con Php3 ho la necessità di lanciare un programma esterno. Pensavo di
poterla risolvere così:
if (exec(/var/shared/programma) {
    .....;
}
else {
    echo "impossibile lanciare il programma";
}
...
C'è qualcosa di sbagliato in questo? Se così non fosse Vi potrei parlare del
programma che devo lanciare e dei parametri che questo riceve.
Grazie
Giorgia


Ma ti funziona o no?


wrote:


 Ma ti funziona o no?
Non mi ritorna un errore, e soprattutto non ritorna "Impossibile lanciare il
programma".
Esegue tutto il codice (....) ma non lancia il programma che infatti non
registra alcun log.
Al programma esterno devo passare un file postScript. Quindi il mio ocmando
exec č:
if(exec(/var/shared/programma percorso/filePostScript))
Come posso fare?
Giorgia

Forse non hai i permessi per eseguire quel file, controlla =)


 Forse non hai i permessi per eseguire quel file, controlla =)
Però se lo lancio da sistema operativo il programma viene eseguito. E poi
scusa ma forse la condizione if(exec(....) non verrebbe soddisfatta se non
avessi i permessi. O sbaglio? Poco istruzioni prima eseguo la copia per
mezzo del exec(/bin/cp -f file file) e tutto funziona. Quando lancio
distiller per il file postscript invece no. Distiller può ricevere come
parametro solo il file postScript. Questo è quello che passo.
Giorgia

 eseguire, altrimenti ovviamente ritorna un errore.
Però in questo if(exec(programma) non dovrebbe non essere soddisfatta?
Giorgia

 avessi i permessi. O sbaglio?
Cito dal manuale:
string exec (string command [, string array [, int return_var]])
- exec() executes the given command, however it does not output anything. It
simply returns the last line from the result of the command.
- If the array argument is present, then the specified array will be filled
with every line of output from the command. Note that if the array already
contains some elements, exec() will append to the end of the array. If you
do not want the function to append elements, call unset() on the array
before passing it to exec().
- If the return_var argument is present along with the array argument, then
the return status of the executed command will be written to this variable.
=))
LAMASE

Giorgia, come ha detto LAMASE, secondo me devi dare altri due parametri a
exec(), ed esaminare la return value del programma, che ti viene ritornata
nella stringa che passi come terzo parametro a exec
poi controlla che il programma sia nel PATH dell'utente con cui gira il
webserver, fai un file php con dentro solo phpinfo(); e guarda le variabili
di ambiente
poi controlla che il programma sia eseguibile dall'utente con cui gira il
webserver, che il file di input sia leggibile e quello di output scrivibile
L.


wrote:


 nella stringa che passi come terzo parametro a exec
Fatto. Quello che passo come terzo parametro (la return value) a seguito
dell'esecuzione vale 31 (errore del Distiller Server ovvero del programma
lanciato con l'exec).
    Unable to create directory /.distiller
Questo lo leggo dal file error_log di Apache.
Se lancio Distiller Server da shell funziona che è un amore, da php/Apache
No :-(((
Giorgia
P.S. Devo mica capire se nella configurazione di Apache punto anche alla
cartella chge contiene il programma (/usr/shared/Adobe/....)?? E come?

 wrote in message
news:98638169...@artemide.newnetworks.it...


Aaaaahhhhh.....forse ci siamo.....se il tuo apache gira come nobody, e sei
su redhat o simili [cut]
Si č' andata. In httpd.conf ho messo l'utente nobody del group root.
Inoltre ho dato i permessi di scrittura sulla cartella /root ai membri del
gruppo root. Il Distiller ha cosě potuto scrivere le preferenze.
Grazie.
Giorgia


wrote:


Giorgia sono assolutamente d'accordo con Paolo, io infatti ti avevo
consigliato di creare una home per nobody, gruppo nobody, non di far girare
apache con gruppo root.....mah
L.

 wrote in message

Ok ho riportato httpd.conf di apache con utente nobody del gruppo nobody. Mi
serviva però che scrivesse le preferenze, almeno spero. Ora apache è nobody
nobody (lo vedo anche dal phpinfo()) e distiller viene lanciato.
Dite che mi è bastato che scrivesse le preferenze? Mah, funzionare funziona,
in termini di sicurezza dite che va meglio?
Giorgia

 wrote in message
news:98646669...@artemide.newnetworks.it...


 nobody, cosi' risolvi il problema in maniera pulita?
Ora Apache è nobody nobody (da phpinfo() User/Group nobody(99)/99 ) e in
/etc/passwd ho la riga:
nobody x:99:99:Nobody:/home/nobody:
Forse sono arrivata alla soluzione definitiva sia? In termini di
funzionamento del processo di distiller si, in termini di sicurezza..... ora
forse si :)
Grazie
Giorgia

 wrote:

Suggerisco una soluzione migliore:
in /etc/passwd, ci sara' una riga tipo
nobody:x:65534:65534:nobody:/:/bin/false
cambiala in
nobody:x:65534:65534:nobody:/home/nobody:/bin/false
e poi, come utente root, dai:
mkdir /home/nobody
chown nobody.nogroup /home/nobody
chmod 664 /home/nobody
Leonardo
-- 
".signature": bad command or file name

Bravo Leo,
esattamente quello che ho consigliato a Giorgia 10 messaggi fa.....
L.