【问题标题】:MSSQL Binary PDF with PHP带有 PHP 的 MSSQL 二进制 PDF
【发布时间】: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


【解决方案1】:

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

php_value mssql.textlimit 10000000
php_value mssql.textsize 10000000

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

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

【讨论】:

    【解决方案2】:

    你试过了吗?

    select hex(pdf) from table;
    

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

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

    【讨论】:

    • 我做到了,但是我收到错误:[Err] 42000 - [SQL Server]'HEX' 不是可识别的内置函数名称。我这里用的是SQL server,不是mysql。
    猜你喜欢
    • 2014-12-27
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多