MSSQL二进制PDF与PHP

时间:2015-03-10 03:01:31

标签: php sql-server binary pdf-generation binary-data

我已经把头发拉了几天关于我遇到的问题。

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

很难向您展示数据库中的原始数据是什么样的,因为我认为无法正确查看二进制数据,您所看到的仅仅是对它的真实含义的解释

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

2 个答案:

答案 0 :(得分:1)

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

php_value mssql.textlimit 10000000
php_value mssql.textsize 10000000

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

希望这可以帮助其他人解决同样的问题。

答案 1 :(得分:0)

你试过这个吗?

select hex(pdf) from table;

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

PHP可以很好地在binary to hexhex to binary之间轻松转换。