我已经把头发拉了几天关于我遇到的问题。
尝试在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^–
很难向您展示数据库中的原始数据是什么样的,因为我认为无法正确查看二进制数据,您所看到的仅仅是对它的真实含义的解释
任何帮助将不胜感激。 谢谢。
答案 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 hex
和hex to binary
之间轻松转换。