【问题标题】:Getting PHP to read .doc files on Linux让 PHP 在 Linux 上读取 .doc 文件
【发布时间】:2008-09-18 05:48:45
【问题描述】:

我正在尝试将 .doc 文件读入数据库,以便可以索引它的内容。 Linux 上的 PHP 是否有一种简单的方法来读取 .doc 文件?如果做不到这一点,是否可以将 .doc 文件转换为 rtf、pdf 或其他易于阅读的“开放”格式?

注意,我对 .docx 文件不感兴趣。

【问题讨论】:

    标签: php database


    【解决方案1】:

    Conor,我建议查看 OpenOffice 命令行界面/调用宏。它可以将许多文件格式转换为许多其他格式。然后你可以选择比 MS doc 更容易解析的东西。

    例如,要转换为 PDF,命令行是:

    /usr/lib/ooo-2.0/program/soffice.bin -norestore -nofirststart -nologo -headless -invisible   "macro:///Standard.Module1.SaveAsPDF(demo.doc)"
    

    【讨论】:

    • 嘿,这是一个很好的提示:你有指向其他类似宏的参考链接吗?
    【解决方案2】:

    似乎有一个library for accessing Word documents,但不确定如何从 PHP 访问它。我认为最好的解决方案是从 PHP 调用他们的wv command

    【讨论】:

    • 这看起来很理想。我需要在一些文档上对其进行测试,但到目前为止 wvText 函数似乎可以满足我的需求。
    【解决方案3】:

    phpLiveDocx 是一个 Zend Framework 组件,可以在 Linux、Windows 和 Mac 上用 PHP 读写 DOC 和 RTF 文件。此外,您可以使用它来生成 PDF 文件,甚至可以将 PHP 中的数据合并到使用 MS Word 或 Open Office 创建的模板文件中!

    查看项目网站:

    http://www.phplivedocx.org

    【讨论】:

      【解决方案4】:

      您可以使用antiwordAbiWord 提取文本并将其提供给您最喜欢的全文索引器。 AbiWord 可能更适合您的目的,因为它可以转换为 RTF、PDF 和其他格式(是的,它是一个 GUI 文字处理器,但它也支持命令行使用)。

      【讨论】:

        【解决方案5】:

        我在 Ubuntu 中发现了一个 unoconv 包。它在 OpenOffice 支持的所有格式之间进行转换。您应该可以在 php 中使用 exec 来运行此实用程序。

        【讨论】:

          【解决方案6】:

          它不是 PHP,但有一个 doc2rtf 实用程序可供您使用。从那里您可以将 RTF 文件作为文本文档打开,编写一些字符串替换例程来删除 RTF 格式代码,并获得适合索引的文本。

          或者,您可以获取 OpenOffice 并打开 MS Word 文档,然后只需文件 > 另存为 > RTF。

          【讨论】:

            【解决方案7】:

            DOC 文件以二进制格式存储,没有任何纯 php 编写的类来处理它们。

            RTF 文件更容易解析,主要是文本,您可以使用 fopen 打开它们并阅读内容。

            如果可以的话,我建议使用 RTF,因为目前还没有针对 DOC 文件的可靠解决方案。

            【讨论】:

              【解决方案8】:

              经过几天的搜索,这是我最好的解决方案: 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);
              

              【讨论】: