Я пытаюсь прочитать файл .doc в базе данных, чтобы я мог индексировать его содержимое. Есть ли простой способ для PHP на Linux читать файлы .doc? В противном случае возможно преобразовать файлы .doc в rtf, pdf или какой-нибудь другой «открытый» формат, который легко читать?
Заметьте, меня не интересуют файлы .docx.
Кажется, есть библиотека для доступа к документам Word, но не уверен, как получить к ней доступ с PHP. Я думаю, что лучшим решением было бы называть их команду wv с PHP.
Конор, я бы предложил посмотреть интерфейс командной строки OpenOffice / вызовы макросов. Он может конвертировать многие форматы файлов во многие другие. Затем вы можете выбрать что-то гораздо более синтаксическое, чем MS doc.
Например, для преобразования в PDF командной строки:
/usr/lib/ooo-2.0/program/soffice.bin -norestore -nofirststart -nologo -headless -invisible "macro:///Standard.Module1.SaveAsPDF(demo.doc)"
phpLiveDocx является компонентом Zend Framework и может читать и записывать файлы DOC и RTF в PHP на Linux, Windows и Mac. Кроме того, вы можете использовать его для создания PDF-файлов и даже объединить данные из PHP в файлы шаблонов, созданные с помощью MS Word или Open Office!
См. Веб-сайт проекта по адресу:
Вы можете использовать antiword или AbiWord, чтобы вытащить текст и передать его вашему любимому полнотекстовому индексу. AbiWord, вероятно, более эффективен для ваших целей, потому что он может конвертировать в RTF, PDF и другие форматы (да, это текстовый процессор GUI, но он также поддерживает использование командной строки).
Я нашел пакет Unoconv в Ubuntu. Это конверсия между всеми форматами, поддерживаемыми OpenOffice. Вы можете использовать exec в php для запуска этой утилиты.
Недавно Microsoft опубликовала спецификацию формата .DOC .
Это не PHP, но есть утилита doc2rtf, которую вы можете использовать. Оттуда вы можете просто открыть RTF-файл в виде текстового документа, написать некоторые строковые процедуры замены, чтобы удалить коды форматирования RTF и получить глобус текста, подходящий для индексирования.
В качестве альтернативы вы можете получить OpenOffice и открыть документы MS Word и просто File> Save As> RTF.
Файлы DOC хранятся в двоичном формате, в котором не было каких-либо чисто написанных PHP-классов.
Файлы RTF намного проще разбирать, будучи в основном текстом, вы можете просто открыть их с помощью fopen и прочитать содержимое.
Я бы предложил использовать RTF, если это возможно, поскольку на самом деле для DOC-файлов действительно нет звукового решения.
Вы можете проверить исходный код этой статьи: Чтение «чистого» текста из DOCX и ODT
После нескольких дней поиска, вот мое лучшее решение: http://wvware.sourceforge.net/
Установить пакет
sudo apt-get install wv
Используйте его в PHP:
$output = str_replace('.doc', '.txt', $filename); shell_exec('/usr/bin/wvText ' . $filename . ' ' . $output); $text = file_get_contents($output); # Convert to UTF-8 if needed if(!mb_detect_encoding($text, 'UTF-8', true)) { $text = utf8_encode($text); } unlink($output);