首页 文章

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

提问于
浏览
1

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

终端手动命令:

/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

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

my_system,storage,app,quotations = drwxrwxrwx apache apache

我的 sudo 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;
}

谢谢 .

1 回答

  • 0

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

    引用正确的答案:

    所以,你需要i)给apache的用户一个家,ii)给它一个有权写入的目录 . 所以,在你存储你的网页的同一个文件夹中创建一个tmp目录然后运行下面的php代码:

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

    我刚刚测试过,它在我的机器上完美运行 . 确保你的./tmp将其权限设置为777.此外,如果你过度使用apache,你可能需要重启apache . 一段时间后,当我进行更改时,它停止了为我工作,我需要重新启动它 .

相关问题