2015-07-24 2 views
0

J'essaie de convertir le fichier HTML en fichier RTF en utilisant unoconv en php.exécutez exec en php pour convertir le fichier en utilisant unoconv

De php Je vous appelle:


    ...... 
    file_put_contents("/tmp/unoconv55b2862fea753.html", $content); 
    $command = "unoconv -f rtf -o /tmp/unoconv55b2862fea753.rtf /tmp/unoconv55b2862fea753.html"; 
    exec($command, $output); 
    $converted = file_get_contents("/tmp/unoconv55b2862fea753.rtf"); 

le problème est que file_put content sauvera .html, mais unoconv pour une raison quelconque ne pas enregistrer le fichier converti dans le répertoire/tmp.

Lorsque j'exécute cette commande $ directement sur le serveur de la console, le fichier converti a été créé.

Avez-vous une idée de ce qui pourrait poser problème?

+0

utilisation exec() de 3 arg pour capturer la valeur de sortie de unoconv et Voyez ce qui s'est passé ... vous présumez simplement que ça fonctionne. –

+0

Que contient '$ output' après cet appel? – ssnobody

+0

la sortie est: array (0) {}, et le return_var est: 251 – jalco

Répondre

-1

Lors de la configuration unoconv sur le serveur ubuntu à exécuter sous apache (www-data) utilisateur Cette solution est basée sur:
https://github.com/dagwieers/unoconv/issues/87#issuecomment-16563550
et
https://github.com/dagwieers/unoconv/issues/87#issuecomment-32084464

étape par étape
Suivez ces étapes:
1. Créer un nouveau fichier qui contiendra l'entrée sudoers pour l'utilisateur www-data: sudo vi /etc/sudoers.d/www-data
2. Ajouter le contenu suivant au fil nouvellement créé e et enregistrer: www-data ALL = NOPASSWD:/usr/bin/unoconv
3. Dans exec() de PHP utiliser "sudo unoconv"

+0

C'est l'une des réponses les plus folles que j'ai vu sur SO. Avez-vous perdu la raison? Dire aux gens que leur utilisateur www-data devrait devenir sudo et ne pas avoir besoin d'un mot de passe pour faire des choses d'administration? – Richard

0

Le problème pourrait résider dans le fait que PHP n'a pas les droits appropriés pour le répertoire tmp. Essayez d'enregistrer le fichier converti à la racine de votre site (ou un sous-dossier à l'intérieur) et voir s'il se convertit avec succès.

+0

Je ne pense pas que cela puisse poser un problème car ce dossier/tmp est arrivé en utilisant sys_get_temp_dir(); deuxième raison pour laquelle je ne pense pas que c'est un problème, c'est que file_put_contents() fonctionne bien, et le fichier y est enregistré. juste que l'exécution de la commande en utilisant la fonction exec() ne fonctionne pas:/ – jalco

+0

Croyez-moi, juste parce que vous ne pensez pas que cela pourrait être un problème ne veut pas dire que ce ne sera pas le cas. J'ai passé beaucoup trop d'heures à penser "Ça ne pouvait pas être ça ...". Rappelez-vous que PHP est son propre utilisateur sur le serveur, et que cet utilisateur exécute la commande unoconv. Tout le reste échoue, je suis d'accord avec Marc B (ci-dessus) – boylett

+0

a obtenu le même résultat. J'ai créé le dossier rwxrwxrwx directement dans le dossier racine du site. essayé d'enregistrer ce fichier généré dans ce dossier en utilisant exec(). le dossier était vide. Après que j'ai exécuté la commande directement à partir de la console et le fichier généré a été créé là – jalco