【发布时间】:2011-09-17 05:50:08
【问题描述】:
我们正在进行数据迁移,项目需要从一个特定的表中将 BLOB 数据保存到文件中,并发送给供应商,因为它们的结构
我可以一次完成这个,但需要创建一个批处理,因为有 50,000 行/潜在文件。
我当前的代码是
$sql = "SELECT a.guid AS file_name, a.attachment AS file_blob"
." FROM attachment a";
$squery = oci_parse($link, $sql);
oci_execute($squery);
while ($row = oci_fetch_array($squery, OCI_ASSOC | OCI_RETURN_LOBS)) {
header('Content-type: octet-stream;');
header('Content-disposition: attachment;filename='.$row['FILE_NAME']);
print $row['FILE_BLOB'];
}
oci_free_statement($squery);
我确实明白我宁愿保存数据而不是将其流式传输到浏览器,我只是不知道如何实现这一点,我应该查看 php 文件 I/O fputs() 吗?
最终结果是我希望根据查询将二进制文件批量写入文件夹的过程
编辑
感谢您的指导和帮助,基于此,我最终想出了两种不同的方法来实现这一目标 首先,我执行了以下 getcwd() 来验证服务器指向的位置,并在需要时执行绝对路径
$basedir = '/path/to/host/www/blobdoc/';
设置 blobdoc 文件夹的权限,然后在 while 循环中使用以下任一脚本
$filename='';
$filename=$basedir.$row['FILE_NAME'];
file_put_contents( $filename, $row['FILE_BLOB']);
$filename='';
$filename=$basedir.$row['FILE_NAME'];
$File = @fopen( $filename, 'w' );
if( $File ) {
if( FALSE === fwrite( $File, $row['FILE_BLOB'] ))
return FALSE;
fclose( $File );
return TRUE;
}
【问题讨论】:
-
你似乎已经有了答案。不要使用
print,而是将$row['FILE_BLOW']写入文件。