MSSQL二进制PDF与PHP

MSSQL二进制PDF与PHP,php,sql-server,binary,pdf-generation,binary-data,Php,Sql Server,Binary,Pdf Generation,Binary Data,这几天来,我一直在为我的问题发牢骚 尝试读取作为二进制blob数据存储在SQL数据库(不是mysql)varbinary字段中的PDF 如果我使用像Navicat这样的程序,并将原始blob数据直接保存为PDF格式,则该文件可以正常工作 当我尝试通过PHP从mssql查询中读取数据并创建PDF文件时- $file = "file.pdf"; $data = $row['FileData']; file_put_contents($file, $data); 它会创建PDF,但它已损坏且无法打开

这几天来,我一直在为我的问题发牢骚

尝试读取作为二进制blob数据存储在SQL数据库(不是mysql)varbinary字段中的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^–
%PDF-1.4
%Çì¢
50 obj
流动
本月8日晚晚晚晚8日晚晚晚8日晚晚晚8日晚晚8日晚晚8日晚晚晚8日晚晚晚8日晚晚8日晚晚8日晚晚晚8日晚晚晚8日晚晚晚8日晚晚晚8日晚晚晚8日晚晚晚晚晚8日晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚晚CZN\I8ßF8ÜFcI܆ßxAèRèèèèèèCZN\I8ßFcI܆b3jlxÔRÛÛèèm2.Yÿo«WÐB
你试过这个吗

select hex(pdf) from table;
使用上述查询并使用
file\u put\u contents();
将内容存储到文件中


PHP在提供从
二进制到十六进制
十六进制到二进制
之间的简单转换方面做得很好

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

php_value mssql.textlimit 10000000
php_value mssql.textsize 10000000
基本上,它是在写入文件,但它停止了63kb(64512字节)的写入,因此增加此限制使脚本能够完成文件其余部分的写入


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

您可能需要外部库来完全处理BLOB中的pdf:从表中检索数据的php是什么?您的db方法可能会试图对数据进行清理或something@VladimirRamik从数据库中提取二进制数据不需要外部库并将其写入文件。OP不是在处理pdf数据,他们只是试图将其拉入磁盘,如果可能的话,我将避免使用任何和所有外部库。只是共享了一个我以前使用过的好链接。谢谢@chiliNUT-这非常令人沮丧,因为它通常只会工作。我没有做任何复杂的事情,我知道data是存储在数据库中的二进制文件。非常感谢您的输入。我确实输入了,但是我收到了错误:[Err]42000-[SQL Server]“HEX”不是可识别的内置函数名。我在这里使用的是SQL Server,而不是mysql。