unoconv fonctionne à partir du terminal en utilisant www-data mais pas à partir du script php aussi en tant que www-data

J’ai écrit la fonction suivante dans php

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'); } 

Il n’a généré aucun message d’erreur, ni aucun fichier pdf.

En terminal, lorsque je lance directement l’unoconv en tant que www-data, je n’ai eu aucun problème.

Ceci est mon résultat après exécution:

 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 ) 

S’il vous plaît donnez votre avis.

Le problème est que j’utilise Nginx et PHP-FPM.

Dans Nginx, le PATH n’est pas déclaré par défaut.

Il y a donc 2 solutions.

1) vous le déclarez dans les parameters de fastcgi pour Nginx.

Voir ici

2) vous le déclarez dans le script en utilisant putenv() juste avant d’exécuter le code unoconv .

comme

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

Je voudrais également append qu’une certaine méthode de dépannage m’a aidé à réaliser ce problème. Voir ici

Pour une solution possible, voir ici .

Extrait du post …

C’est ce que j’ai fait pour faire fonctionner unoconv via du code Apache / PHP s’exécutant sur Cent OS 6.2 (version unoconv 0.6 et LibreOffice 3.4.5.2): (Ceci n’est qu’une solution de contournement – la cause première n’est pas connue de moi)

Changer l’utilisateur apache de / sbin / nologin en / bin / bash (Ceci est fait dans le fichier / etc / passwd) Ajouter un nouvel utilisateur unoconv Ajout d’un nouveau fichier /etc/sudoers.d/unoconv avec le contenu suivant:

apache ALL = (unoconv) NOPASSWD: / usr / bin / unoconv (notez que mon programme unoconv se trouve à cet emplacement / usr / bin / unoconv – vous le trouvez en utilisant quel unoconv)

Utiliser visudo pour commenter la ligne suivante (en ajoutant un # au début de la ligne)

#Defaults requiretty

Redémarrer les services sshd et httpd

Exécutez unoconv comme ceci avec la fonction php exec () (vous devrez changer le nom du fichier d’entrée et le répertoire de sortie):

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

J’espère que cela te convient