【问题标题】:Does OCI-Lob::import function stream the data?OCI-Lob::import 函数是否流式传输数据?
【发布时间】:2012-11-03 18:14:03
【问题描述】:

我正在使用OCI-LOB::import 将文件存储到数据库中。

  1. 如果文件很大,大于 php memory_limit 设置会怎样? OCI-LOB::import 是否会进行流式传输并将文件数据以较小的块发送到数据库?
  2. 是否有任何 OCI 函数可以控制与 LOB 相关的数据流?最重要的是,例如设置块大小。

【问题讨论】:

    标签: php oracle blob


    【解决方案1】:

    1) 大数据写入lob时不用担心php的memory_limit

    2)您可以使用OCI-Lob::write函数将数据分块写入lob对象

    $chunkSize = 1024;
    $f = fopen ($filename, 'r');
    while ($buf = fread($f, $chunkSize))
    {
        $lob->write($buf);
    }
    

    【讨论】:

    • 感谢您的回答,投了赞成票。我在 php 源代码中阅读了实现,并且更准确地回答了我的第一部分问题。
    【解决方案2】:

    从 PHP 5.3.18 源码检查oci8_lob.c 后发现

    1. OCI-LOB::import 使用固定大小的缓冲区读取文件数据并写入 LOB 描述符。缓冲区的长度设置为 8192 字节,并且在源代码中进行了硬编码。这意味着,OCI-LOB::import 使用 8K 大小的块将数据发送到数据库。
    2. 无法修改 OCI-LOB::import 使用的块大小,因为它在源代码中是硬编码的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多