PHP Laravel LibreOffice DOC到PDF不通过浏览器运行转换


PHP Laravel LibreOffice DOC to PDF not converting via browser run

我目前正在通过DropzoneJS上传DOC或DOCX文件,然后使用LibreOffice PHP exec在服务器中将其转换为PDF。如果我在服务器中手动输入它,那么它会转换,但如果我通过浏览器运行它,那么它不会转换。我试图在没有sudo的情况下运行办公室,但通过浏览器运行的命令不起作用。我如何通过浏览器运行转换它?

终端手动命令:

/opt/libreoffice5.2/program/office——convert-to PDF/var/www/html/my_system/public/msword.doc——outdir/var/www/html/my_system/storage/app/quotations

命令ls -liah文件夹的结果:

my_system, storage, app, quotations = DRWXRWXRWX apache apache

My sudo visudo results(按顺序粘贴没有注释的行):

Defaults    requiretty
Defaults   !visiblepw
Defaults    always_set_home
www-data ALL=NOPASSWD:ALL
robert ALL=NOPASSWD:ALL
apache ALL=NOPASSWD:ALL
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;
}

谢谢。

通过https://superuser.com/questions/627266/convert-file-to-pdf-using-libreoffice-under-user-apache-i-e-when-using-php找到正确答案

正确答案:

所以,你需要i)给apache的用户一个home和ii)给它一个要写入的目录。创建tmp目录与存储网页的文件夹相同,然后运行下面的PHP代码:

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

我刚刚测试过,它在我的机器上运行得很好。确保你的./tmp的权限设置为777。此外,您可能需要重新启动如果你使用Apache太多的话。它对我不起作用了过了一段时间,当我做了更改,我需要重新启动它。