2

我在 mysql 数据库中将 docx 文件保存为 BLOB 类型。保存后,我试图通过获取文件的内容来查看文件的内容,但它显示了一些不可读的内容。这对于扩展名为 .doc 的文件效果很好,但我不知道为什么它不起作用.docx 文件。如果有任何答案,请提供适当的解释。

4

3 回答 3

1

进行查询以选择数据,然后将结果放入变量中。使用 file_put_content 获取 docx 文件。只是要小心标题。

要阅读它,该过程与文档不同。您必须“解压缩” docx 并读取其中的 xml 文件。您可以使用此功能:

<?php

/*Name of the document file*/
$document = 'filename.docx';

/**Function to extract text*/
function extracttext($filename) {
    //Check for extension
    $ext = end(explode('.', $filename));

    //if its docx file
    if($ext == 'docx')
    $dataFile = "word/document.xml";
    //else it must be odt file
    else
    $dataFile = "content.xml";     

    //Create a new ZIP archive object
    $zip = new ZipArchive;

    // Open the archive file
    if (true === $zip->open($filename)) {
        // If successful, search for the data file in the archive
        if (($index = $zip->locateName($dataFile)) !== false) {
            // Index found! Now read it to a string
            $text = $zip->getFromIndex($index);
            // Load XML from a string
            // Ignore errors and warnings
            $xml = DOMDocument::loadXML($text, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            // Remove XML formatting tags and return the text
            return strip_tags($xml->saveXML());
        }
        //Close the archive file
        $zip->close();
    }

    // In case of failure return a message
    return "File not found";
}

echo extracttext($document);
?>

(代码来源:http: //www.botskool.com/geeks/how-extract-text-docx-or-odt-files-using-php

于 2013-09-20T10:22:01.307 回答
0

Docx 是一种压缩文件类型参见 Tag Wiki

这就是为什么您无法从原始内容中获取文档内容的原因。

于 2013-09-20T11:08:32.040 回答
0

我找到了这个解决方案:

"update blob_table set blob_col='LOAD_FILE('$tmp_name')";

您上传的文件在哪里$tmp_name,这是这个 6 年老问题的答案,使用LOAD_FILE 函数。可能这是mysql新增的功能。

于 2019-09-25T18:02:05.070 回答