Преобразование файла в 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, следующее не будет преобразовывать файл.

  • Apache без подключения к Интернету
  • Возможно, не работает Apache 2.2 на Ubuntu 10.10 (Maverick Meerkat)
  • Apache Server в Windows 7 открывает порты?
  • Драйверы Microsoft PHP SQL Server не работают, модуль загрузки по умолчанию
  • PHP-код возвращается вместо выполненного
  • Как получить доступ к гостевому серверу из Интернета
  •  <?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 

  • Как сделать мой постоянный шлюз постоянным в CentOS? Чтобы после перезагрузки он не потерялся
  • Настройка Apache для обслуживания нескольких поддоменов через HTTP + HTTPS
  • Драйверы Microsoft PHP SQL Server не работают, модуль загрузки по умолчанию
  • Не удается получить доступ к веб-серверу apache, работающему в домашней сети из Интернета
  • Как получить доступ к гостевому серверу из Интернета
  • Создание домашнего веб-сервера
  • 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 в каком-либо другом файле, оно обрабатывается тихо, и вам нужно исправить разрешения для своего пользователя?

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