Преобразование файла в PDF с помощью LibreOffice под пользователем apache (т.е. при использовании PHP)

Я установил libreoffice-headless и могу конвертировать документы при входе в оболочку как обычный пользователь.

[root@desktop ~]# yum install libreoffice-headless [root@desktop ~]# yum install libreoffice-writer [root@desktop ~]# su NotionCommotion sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export 

Теперь я хочу сделать то же самое, но используя PHP и, следовательно, как пользовательский apache, следующее не будет преобразовывать файл.

 <?php shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc'); ?> 

В попытке устранить неполадки я выполнил ту же команду через оболочку, что и пользователь apache, но все же он не будет преобразовывать файл:

 [root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc" 

Apache, в отличие от обычных пользователей, не имеет дома, и я помню, что мне, возможно, нужно было бы указать дом с помощью HOME=/tmp/ayb прежде чем пытаться преобразовать его, но это не помогает (я думаю, при использовании CentOS 5.8 и, возможно, Другая версия LibreOffice, но это не так).

Как преобразовать файл в PDF, используя libreoffice при запуске его в качестве пользователя apache?

Установленная система:

 CentOS 6.4 httpd.x86_64 2.2.15-28.el6.centos @updates libreoffice-headless.x86_64 1:3.4.5.2-16.1.el6_3 @base 

  • Phpinfo () и php -v показывает другую версию PHP
  • Проблемы с PHP / cURL / Fedora разрешают имя хоста, возможно, проблему DNS?
  • Веб-хостинг дома на старом оборудовании
  • PHP-скрипт не может запускать скрипт bash. Sh: Разрешение отклонено
  • Как запустить PHP-скрипты через CMD без ввода «php»?
  • Как переключить PHP 5.5 вместо PHP 5.4 в Bitnami
  • Как обновить с PHP v5.4 до PHP v5.5 в bitnami ubuntu
  • Mod_rewrite работает, но php-страницы не найдены или не распознаны (загружаются, а не выполняются)
  • 2 Solutions collect form web for “Преобразование файла в PDF с помощью LibreOffice под пользователем apache (т.е. при использовании PHP)”

    Здесь есть две проблемы. Во-первых, www-data (пользователь Apache) не имеет $HOME поэтому libreoffice не может работать, если не существует $HOME . Вторая проблема заключается в том, что, если вы специально не настроили ее таким образом (и вы действительно действительно не должны этого делать), apache не имеет доступа к директории system /tmp . Веб-сервер обычно работает в ограниченной среде и не имеет полного доступа к файловой системе по очень важным причинам безопасности.

    Итак, вам нужно: 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, если вы слишком сильно играете с ним. После того, как я внес изменения, он перестал работать на меня, и мне нужно было перезапустить его.

    У меня была аналогичная проблема на Debian, и я решил это.

    Запустите команду, но с началом в начале:
    strace -f -o output.txt soffice --headless --convert-to pdf (...)

    Это приведет к созданию огромного файла журнала с каждым доступом к API системы и его результатом.
    В моем случае, где-то около 5000, было что-то вроде этого:
    open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)

    Следуя этой тропе, я изменил разрешения рекурсивно для папки /var/spool/libreoffice до 777 .

    После этого конверсия начала работать для каждого пользователя.

    Возможно, вы также получаете Permission denied в каком-либо другом файле, оно обрабатывается тихо, и вам нужно исправить разрешения для своего пользователя?

    Давайте будем гением компьютера.