【问题标题】:Firebird pdf blob save as pdf-file by PHPFirebird pdf blob 通过 PHP 保存为 pdf 文件
【发布时间】:2019-04-17 16:34:07
【问题描述】:

我有一个从 Firebird 3.0 数据库接收到的 blob。

if($dbh = ibase_connect($db,$username,$password, 'UTF-8')){
echo "Connecton steht zur Firebird DB steht! <br>";
$sql = "SELECT MEMO FROM DMS where ID = '44'";
// Execute query
$rc = ibase_query($dbh, $sql);
// Get the result row by row as object
$data = ibase_fetch_object($rc);
$blob_data = ibase_blob_info($data->MEMO);
$blob_hndl = ibase_blob_open($data->MEMO);

$inhalt = ibase_blob_get($blob_hndl, $blob_data[0]);

ibase_blob_echo($data->MEMO)

浏览器中有很多标志,所以 SQL 查询有效。现在我想将内容(它的 PDF)写入磁盘上的 pdf 文件中。

每次尝试都没有成功:

file_put_contents('test.pdf', $inhalt);
file_put_contents('test.pdf', ibase_blob_echo($data->MEMO));

等等。

当我们尝试使用 Acrobat Reader 打开 PDF 文件时,出现错误消息:不支持任何 PDF 文件/文件类型

我们如何解决这个问题?

【问题讨论】:

  • 列的数据类型是什么?鉴于您的问题描述,我怀疑它是blob sub_type text,而不是blob sub_type binary,这意味着文件将被损坏。
  • 也许您应该检查以en.wikipedia.org/wiki/List_of_file_signatures 开头的文件内容,并且有适用于 UNIX 和 Windows 的程序有它们的猜测数据库。附言你也关闭 BLOB 句柄吗?
  • 人们必须在此处从 BLOB 中删除前缀:stackoverflow.com/questions/21608810Dunno,如果在此处应用的话
  • 很可能博客很大,分成许多段,您只下载文件的第一段,删除所有其余部分。请参阅php.net/manual/ru/function.ibase-blob-get.php 的 cmets
  • @Arioch'The IIRC 这个问题是关于特定于应用程序的存储格式,而不是一般问题。

标签: php blob firebird


【解决方案1】:

感谢您的回答......我们以某种方式解释它们,上面的代码基本上是正确的。过了一会儿,我们发现出现错误是因为我们将 DB Connect 中的字符集更改为 varchar 字段的 UTF8。对于我们现在连接的 blob,无需更改字符集,并且读数正常工作。再次感谢你。

$dbh = ibase_connect($db,$username,$password)

【讨论】:

  • 这表明你的 blob 是 sub_type 文本,而不是 sub_type 二进制;您需要解决这个问题,而不是使用单独的连接(以及相关的开销)。
  • w.r.t. “代码正确”我想知道您的最大 BLOB 大小是多少...尝试将一些 100MB 的 zip 文件放入 blob,然后使用该简化代码将其读出。它会起作用吗?此外,您没有说是否关闭 blob 句柄。手柄泄漏是 Firebird 性能持续下降的一个已知案例。
猜你喜欢
  • 2021-04-15
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
相关资源
最近更新 更多