2013-07-17 8 views
10

Sto provando a eseguire un comando di shell text2wave in PHP su un server nginx.Text2wave festival non funziona tramite nginx php exec

Il problema è che il comando esce silenziosamente senza funzionare come dovrebbe. Inoltre non mostra errori.

Ecco il codice:

<?php 
$result = `/usr/bin/text2wave --help`; 
var_dump($result); 

Se faccio funzionare lo scritto tramite comandi php in guscio (come utente normale) che funziona come previsto. Tuttavia, se lo eseguo tramite una richiesta http su nginx var_dump restituisce NULL (non ci sono anche registri nei file di registro degli errori)

Grazie per il vostro aiuto!

+0

forse perché l'istanza php non ha il permesso di eseguire il comando, controllare le autorizzazioni e la proprietà dell'eseguibile 'text2wave' –

+0

le autorizzazioni sono -rwxr-xr-x. Come il festival del programma che funziona perfettamente via nginx php –

+0

prova ad abilitare 'ini_set ('display_errors', 'on')' nella prima riga e vedere se mostra qualcosa. –

risposta

0

La mia ipotesi sarebbe che l'esecuzione della shell sia disabilitata nel file di configurazione php.ini utilizzato dal server web.

provare ad aprire /etc/php5/fpm/php.ini di file, trovando la direttiva disable_functions, e fare in modo che nessuno delle seguenti funzioni sono presenti nel valore della direttiva: shell_exec,exec,passthru,system

+0

Puoi spiegare come esegue magicamente '$ result = '/ usr/bin/text2wave --help';'? Guardalo di nuovo - questo è un incarico variabile (stringa), non una funzione. OP non ha bisogno di correggere alcuna configurazione; invece, OP ha bisogno di correggere il suo codice PHP. –

+0

@ e-sushi http://php.net/manual/en/language.operators.execution.php –

+0

Oh, quelli sono * "backtick" *! Pensavo che quelli fossero errori di formattazione ... (colpisce la testa contro il muro) Il mio male; hai assolutamente ragione. Grazie per il testa a testa. Ho rimosso la mia risposta sbagliata di conseguenza. Dal mio punto di vista, otterrete quella taglia ben meritata! D'altra parte, osservando il fatto che non ho notato la differenza tra virgolette singole e apici inversi, la mia * "vista" * potrebbe non essere la migliore su cui fare affidamento. ;) –

3

prova:

<?php 
function sys_cmd($cmd) 
{ 
    $hd = popen($cmd,"r") or die('function disabled'); 
    while (!feof($hd)) 
    { 
     $rs .= fread($hd,1024);  
    } 
    pclose($hd); 
    return $rs; 
} 
echo sys_cmd('ls -l'); 
?> 
+0

lo script funziona con 'ls -l', ma non con 'text2wave --help' (né l'uso normale di text2wave ovviamente) –

0

a nessuno avendo lo stesso problema ... sono riuscito a scoprire quale fosse il problema. Bene .. tipo di.

Sono passato ad Apache e ha iniziato a funzionare immediatamente. Quindi la soluzione non è quella di utilizzare nginx

Immagino che avesse qualcosa a che fare con il modo in cui nginx corse php quando si fa comandi exec ...

Anche se era una decisione difficile, ho trovato altra soluzione, ma per passare ad Apache ... funziona bene ora