我正在使用OCI-LOB::import
将文件存储到数据库中。
- 如果文件很大,大于 php
memory_limit
设置会发生什么?是否会OCI-LOB::import
以较小的块进行流式传输并将文件数据发送到数据库? - 是否有任何 OCI 功能可以控制与 LOB 相关的数据流?最重要的是,例如设置块大小。
我正在使用OCI-LOB::import
将文件存储到数据库中。
memory_limit
设置会发生什么?是否会OCI-LOB::import
以较小的块进行流式传输并将文件数据发送到数据库?1)大数据写入lob时不用担心php的memory_limit
OCI-Lob::write
2)您可以使用函数将数据按块写入lob对象
$chunkSize = 1024;
$f = fopen ($filename, 'r');
while ($buf = fread($f, $chunkSize))
{
$lob->write($buf);
}
从 PHP 5.3.18 源码检查后oci8_lob.c
发现
OCI-LOB::import
使用固定大小的缓冲区读取文件数据并写入 LOB 描述符。缓冲区的长度设置为 8192 字节,并且在源代码中进行了硬编码。这意味着,OCI-LOB::import
使用 8K 大小的块将数据发送到数据库。OCI-LOB::import
因为它在源代码中是硬编码的。