2016-10-17 3 views
1

Je suis en train de télécharger un fichier DOC ou DOCX via DropzoneJS, puis le convertir en PDF sur le serveur en utilisant LibreOffice PHP exec. Si je l'ai tapé manuellement dans le serveur, il se convertira mais si je l'exécute via le navigateur, il ne convertit pas. J'essaye d'exécuter le soffice sans sudo mais la commande exécutée par le navigateur ne fonctionne pas. Comment puis-je le convertir via le navigateur?PHP Laravel LibreOffice DOC vers PDF ne convertit pas via le navigateur run

commande manuelle dans le Terminal:

/opt/libreoffice5.2/program/soffice --Convertir à pdf /var/www/html/my_system/public/msword.doc --outdir /var/www/html/my_system/stockage/app/devis

commande ls -liah résultats pour les dossiers:

my_system, le stockage, l'application, citations = drwxrwxrwx Apach e apache

Mes Sudo visudo résultats (lignes collées sans commentaires dans l'ordre):

Defaults requiretty 
Defaults !visiblepw 
Defaults always_set_home 

www-data ALL=NOPASSWD:ALL 
robert ALL=NOPASSWD:ALL 
apache ALL=NOPASSWD:ALL 

fichier PHP:

$command = '/opt/libreoffice5.2/program/soffice --convert-to pdf /var/www/html/my_system/public/msword.doc --outdir /var/www/html/my_system/storage/app/quotations'; 

if (!$return) { 
    echo "PDF Created Successfully"; 
} else { 
    echo 'PDF not created. Command = ' . $command . '=' . $return; 
} 

Merci.

+0

Comment l'utilisez-vous? Il n'y a pas de $ retour dans votre exemple de code, donc je preume que c'est abrégé. Et wjat est le code de sortie de la commande? – bishop

+0

@bishop Je suis en cours d'exécution via le téléchargement, faites glisser et déposez dans le navigateur, puis dropzone appel ajax qui est le fichier PHP. Je pense que si après la ligne de téléchargement en PHP puis la deuxième ligne est converti le fichier DOC téléchargé en PDF est trop rapide, donc il n'est pas converti? Mon résultat AJAX est: PDF non créé. Commande = /opt/libreoffice5.2/program/soffice --convertir en pdf/var/www/html/mon_système /public/MSWord_testing_DOC.doc --outdir/var/www/html/my_system/storage/app/offres = 77 – marknt15

Répondre

0

trouvé la réponse correcte via https://superuser.com/questions/627266/convert-file-to-pdf-using-libreoffice-under-user-apache-i-e-when-using-php

Citation correcte Réponse:

, vous avez besoin i) donner l'utilisateur de apache une maison et ii) donner un répertoire il a accès à écrire . en, créez un répertoire tmp dans le même dossier où vous stockez votre page Web et puis exécutez le code suivant php:

<?php 
    shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc'); 
?> 

Je viens de tester et cela fonctionne parfaitement sur ma machine. Assurez-vous que votre ./tmp a ses autorisations définies sur 777. En outre, vous devrez peut-être redémarrer apache si vous jouez trop avec lui. Il a cessé de fonctionner pour moi après un moment quand j'ai fait des changements et j'ai eu besoin de le redémarrer.

+0

Si jamais vous partagez ce serveur, considérez Apache mpm-itk ou php-fpm – jdog