MSSQL Binary PDF with PHP


MSSQL Binary PDF with PHP

几天来我一直在为我遇到的问题拔头发。

尝试读取在 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^–

很难向你展示数据库中的原始数据是什么样子的,因为我认为二进制数据无法正确查看,你所看到的只是对它真实情况的解释。

任何帮助将不胜感激。谢谢。

通过将以下内容添加到我的 .htaccess 文件解决了这个问题

php_value mssql.textlimit 10000000
php_value mssql.textsize 10000000

基本上它正在写入文件,但它停止了 63kb(64,512 字节)到文件中,因此增加此限制使脚本能够完成文件的其余部分的写入。

希望这对其他人有同样的问题有帮助。

你试过这个吗?

select hex(pdf) from table;

使用上述查询并使用file_put_contents();将内容存储到文件中。

PHP 在提供 binary to hexhex to binary 之间的轻松转换方面做得很好。