【发布时间】:2015-05-11 09:39:12
【问题描述】:
几天来,我一直在为我遇到的问题而烦恼。
尝试读取在 SQL 数据库(不是 mysql)varbinary 字段中存储为二进制 blob 数据的 PDF。
如果我使用像 Navicat 这样的程序,并将原始 blob 数据直接保存为 PDF,则该文件可以正常工作。
当我尝试通过 PHP 从 mssql 查询中读取数据并创建 PDF 文件时 -
$file = "file.pdf";
$data = $row['FileData'];
file_put_contents($file, $data);
它会创建 PDF,但它已损坏且无法打开。
我很难确切地知道数据在数据库中的存储格式。当我在 Navicat 中查看 BLOB 数据时,它呈现如下:
%PDF-1.4
%Çì¢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream
xœÅY[o·F_÷Wð%èlðÞûX¸-8èCÐy-Éjt±´qÚüŒö÷#‡Crv¹Y§ÞÔ`qÈÃÃsùÎ…Ô“# ±ñglïW_çÄÍn•¦ÅwɃç›ÕÓÊ*þKíx{/þxAR‹‹ë•CZN\I8ŠßF8FcI\ܯ†ß/þ±b3jlx?â? ¶rÔÊ‚áÅÛ¼}3Ïm2£y¡·ÿO«WÐB
'ÉŽÖ‰û•Æ—Ï»é[¢¸$”•ViGÅ^<_®¿\Ù‘øçÊ‹oAûÍj£a\’¡ÙBÉÞ¿´q×ë$TÆqRúI<–3weÆúežwÕ
9q–a›¢W¯~¢«ÕHŒ^£l\Ìÿê7–‹H^–
很难向您展示数据库中的原始数据是什么样的,因为我认为无法正确查看二进制数据,而您所看到的只是对其真实情况的解释。
任何帮助将不胜感激。 谢谢。
【问题讨论】:
-
您可能需要外部库来完全处理来自 BLOB 的 pdf:stackoverflow.com/questions/467793/…
-
从表中检索数据的php是什么?您的 db 方法可能会通过尝试清理数据或其他方式来搞砸数据
-
@VladimirRamik 您不应该需要外部库来从数据库中提取二进制数据并将其写入文件。 OP 没有处理 pdf 数据,他们只是试图将其拉出并将其写入磁盘
-
如果可能,我会避免使用任何和所有外部库。只是分享一个我以前用过的好链接。
-
谢谢@chiliNUT - 这非常令人沮丧,因为它通常可以正常工作。我没有做任何复杂的事情,我知道数据是二进制存储在数据库中的。感谢您的意见。
标签: php sql-server binary pdf-generation binary-data