2016-10-17 5 views
1

Я в настоящее время загружаю файл DOC или DOCX через DropzoneJS, а затем конвертирую его в PDF на сервере с помощью LibreOffice PHP exec. Если я набрал его вручную на сервере, тогда он будет конвертировать, но если я запустил его через браузер, он не будет преобразован. Я пытаюсь запустить soffice без sudo, но команда, запущенная через браузер, не работает. Как я могу преобразовать его через браузер?PHP Laravel LibreOffice DOC to PDF не конвертируется через браузер.

Руководство команды в терминале:

/opt/libreoffice5.2/program/soffice --convert к Pdf /var/www/html/my_system/public/msword.doc --outdir /вар/WWW/HTML/my_system/хранение/приложение/котировки

Команда Ls -liah результатов для папок:

my_system, хранение, приложение, цитаты = drwxrwxrwx Apach е апач

Мои Судо visudo результаты (вставленные строки без каких-либо замечаний по порядку):

Defaults requiretty 
Defaults !visiblepw 
Defaults always_set_home 

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

PHP File:

$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; 
} 

Благодарности.

+0

Как вы его управляете? В вашем примере кода нет '$ return', поэтому я предполагаю, что это сокращенно. И wjat - это код выхода команды? – bishop

+0

@bishop Я запускаю его через загрузку, перетаскивание в браузере, а затем вызов dropzone ajax, который является файлом PHP. Я думаю, что если после строки загрузки в PHP, то вторая строка преобразует загруженный файл DOC в PDF слишком быстро, чтобы он не преобразовывался? Мой возвращенный результат AJAX: PDF не создан. Command = /opt/libreoffice5.2/program/soffice --convert-to pdf/var/www/html/my_system /public/MSWord_testing_DOC.doc --outdir/var/www/html/my_system/storage/app/quote = 77 – marknt15

ответ

0

нашел правильный ответ через https://superuser.com/questions/627266/convert-file-to-pdf-using-libreoffice-under-user-apache-i-e-when-using-php

Цитирование Правильный ответ:

Таким образом, вы должны I) дают пользователю апача дом и б) дать ему каталог он имеет доступ к писать . в Итак, создайте каталог TMP в ту же папку, где вы храните ваши веб-страницы, а затем запустить следующий код PHP:

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

Я только что испытал и отлично работает на моей машине. Убедитесь, что у вашего ./tmp есть свои права доступа 777. Также вам может потребоваться перезапустить apache, если вы слишком сильно играете с ним. Он прекратил работать для меня через некоторое время, когда я вносил изменения, и мне нужно было перезапустить его.

+0

Если вы когда-нибудь делитесь этим сервером, рассмотрите apache mpm-itk или php-fpm – jdog

Смежные вопросы