PHP пакетного извлечения BLOB-строк строки DB в файлы - PullRequest
0 голосов
/ 17 июня 2011

Мы находимся в процессе миграции данных, и проекту требуется из одной конкретной таблицы 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;
 }

1 Ответ

0 голосов
/ 17 июня 2011

Вместо:

print $row['FILE_BLOB'];

Используйте что-то вроде:

file_put_contents( $filename, $row['FILE_BLOB']); //save locally

Вам нужно записать блоб в файл.

Если вы хотите принудительно загрузить этот файл, вам нужно использовать правильные заголовки в комбинации с readfile, например:

$file = '/var/www/html/file-to-download.zip'; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/force-download'); 
header('Content-Length: ' . filesize($filename)); 
header('Content-Disposition: attachment; filename=' . basename($file)); 
readfile($file);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...