Мы находимся в процессе миграции данных, и проекту требуется из одной конкретной таблицы BLOB-данных, сохраненных в файлы и отправленных поставщику, благодаря их структуре
Я могу добиться этогоодновременно, но необходимо создать пакетный процесс, так как есть 50000 строк / потенциальных файлов.
мой текущий код
$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, затем использовал eЭто один из следующих скриптов в цикле 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;
}