Запуск (сгенерировать PDF) soffice LibreOffice в Windows PHP exec() не работает

#php #windows #pdf #iis #libreoffice

#php #Windows #PDF #iis #libreoffice

Вопрос:

Я пытаюсь сгенерировать PDF из docx с помощью soffice, поэтому я пробую это в apache Linux и его works, но я пытаюсь в Windows Server 2012 и IIS 6.2.

Если я запускаю эту команду в CMD, она работает:

 soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx
  

Итак, в PHP я пробую это:

 $comando = 'soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx';
$var = exec($comando);
var_dump($var);
  

И он выдает мне «NULL»

То же самое происходит, когда я пытаюсь использовать soffice —version в PHP.

Я даю полное разрешение IUSR в C:Program Файлы Libreoffice и хранилище / приложение также имеют разрешение. В IIS включена анонимная аутентификация.

Я запускаю php и он возвращает «строку (26) «iis apppool defaultapppool» »

 $var = exec('whoami');
var_dump($var);
  

Я не знаю, как я могу это исправить.

Ответ №1:

Я решил это, создав нового пользователя в Windows с низким разрешением для запуска команды, подобной этому пользователю. Я устанавливаю SysinternalsSuite для запуска команды psexec, zip-файл декомпрессируется на C:

Итак, строка, которую я изменил, была:

 $comando = 'soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx';
  

Для:

 $comando = '"C:SysinternalsSuitepsexec.exe" -u DOMAINUSER -p PASSWORD "C:Program FilesLibreOfficeprogramsoffice.exe" --headless --convert-to pdf:writer_pdf_Export --outdir  C:inetpubwwwrootstorageappACTIVO2019-033404docx C:inetpubwwwrootstorageappACTIVO2019-033404docxdocumento_word.docx';