@andrei2018

Почему утилита soffice (LibreOffice) не слушается в shell_exec (PHP)?

Я попробовал две утилиты для конвертации файлов doc в txt.
В консоли Linux обе утилиты выводят русский текст из файлов doc (Microsoft Word) правильно.

Но через shell_exec (на сайте) soffice выводит вопросики вместо русских символов.
Кодировка в header, не влияет.

<?php
header('Content-Type: text/html; charset="utf-8"');

// $text = shell_exec('catdoc -d utf-8 /test.doc'); - работает

$text = shell_exec('soffice --headless --convert-to "txt:Text (encoded):UTF8" --cat /test.doc');
echo $text;
?>

Что нужно изменить или добавить для soffice?
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 2
SagePtr
@SagePtr
Еда - это святое
Нужно учитывать, что PHP через shell_exec напрямую не выполняет команды, а запускает cmd, куда их и передаёт. Соответственно, кодировка там наверняка будет 866. Ни один из предложенных ниже вариантов сам не пробовал, можете попробовать что-то из этого:
а) через chcp менять кодировку. Например, $text = shell_exec('chcp 65001 && soffice --headless --convert-to "txt:Text (encoded):UTF8" --cat /test.doc');
б) записывать во временный файл, из этого файла затем читать: shell_exec('soffice --headless --convert-to "txt:Text (encoded):UTF8" --cat /test.doc > '.$path_to_tempfile);
Ответ написан
Комментировать
@andrei2018 Автор вопроса
В консоли Linux luit работает:
# luit -encoding cp866 cat test.c
�Р���Т
# luit -encoding utf8 cat test.c
ПРИВЕТ

Но в PHP не слушается:
$text = shell_exec('cat test.txt'); - работает
$text = shell_exec('/usr/bin/luit -encoding utf8 cat test.txt'); - дает ошибку: Couldn't copy terminal settings. В мануале написано, что версия luit 1.1.1 .
Думаю, что это из-за прав пользователя PHP.
Что можно изменить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы