2013-05-25 23 views
6

ho scritto la seguente funzione in PHPunoconv funziona da terminale utilizzando www-data, ma non da script php anche come www-data

public static function convert($originFilePath, $outputDirPath, $toFormat) 
{ 
    $command = 'echo $PATH & UNO_PATH=/usr/lib/libreoffice unoconv --format %s --output %s %s'; 
    $command = sprintf($command, $toFormat, $outputDirPath, $originFilePath); 
    exec($command, $output, $result_var); 

    return compact('output', 'result_var', 'outputDirPath', 'originFilePath', 'toFormat'); 
} 

Essa non ha generato alcun messaggio di errore, o qualsiasi file pdf pure.

Nel terminale, quando eseguo l'unoconv direttamente come www-data, non ho riscontrato problemi.

Questo è il mio risultato dopo l'esecuzione:

2013-05-26 03:05:30 Error: Array 
(
    [output] => Array 
     (
      [0] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
     ) 

    [result_var] => 1 
    [outputDirPath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2 
    [originFilePath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2/dsadas.xlsx 
    [toFormat] => pdf 
) 

prega di avvisare.

risposta

5

Il problema è che sto usando Nginx e PHP-FPM.

In Nginx il PERCORSO NON è dichiarato di default.

Quindi ci sono 2 soluzioni.

1) lo si dichiara nei parametri rapidi per Nginx.

Vedere here.

2) lo si dichiara nello script utilizzando putenv() appena prima di eseguire il codice unoconv.

come

putenv('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/node/bin');

Vorrei anche aggiungere che un certo metodo di risoluzione dei problemi mi ha aiutato a realizzare questo problema. Vedi here.

+1

Mi ci sono voluti più di una settimana, ma alla fine ho capito! :) Internet è fantastico! ~~ –

2

Per una possibile soluzione vedere here.

Estratto dal post ...

Questo è quello che ho fatto per far funzionare unoconv tramite codice/php apache in esecuzione su Cent OS 6.2 (versione unoconv 0.6 e LibreOffice 3.4.5.2): (Questo è solo una soluzione - causa principale non è noto a me)

Change user apache da/sbin/nologin a/bin/bash (Questo viene fatto in file/etc/passwd) Aggiungi un nuovo unoconv utente Aggiunto un nuovo file /etc/sudoers.d/unoconv con i seguenti contenuti:

apache ALL = (unoconv) NOPASSWD:/usr/bin/unoconv (si noti che il mio programma unoconv è in questa posizione/usr/bin/unoconv - a trovarlo con il quale unoconv)

Utilizzando visudo commentare la linea followin (aggiungendo un # all'inizio della riga)

#DEFAULTS requiretty

Riavviare sshd e httpd servizi

Run unoconv come questo con php exec() function (si avrebbe bisogno di cambiare il nome del file di input e la directory di output):

exec ('sudo -u unoconv/usr/bin/unoconv -f pdf -o bankgenerated Teacher_bulk_upload.csv');

Spero che questo funziona per voi

+0

Ho visto questo prima mentre su Google. Stavo provando altre possibili soluzioni prima di provare questa soluzione alternativa. Aspetterò altre possibili soluzioni. Se non viene fuori nulla di buono, ricorro a questa soluzione alternativa. Grazie! ~ –