OCI-Lob :: import函数是否对数据进行流式处理?

时间:2012-11-15 06:30:11

标签: php oracle blob

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

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

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