Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выдача большого файла из Blob поля mssql ?
Форумы портала PHP.SU » » Работа с СУБД » Выдача большого файла из Blob поля mssql ?

Страниц (1): [1]
 

1. tux - 16 Февраля, 2012 - 13:16:33 - перейти к сообщению
Добрый день! Столкнулся с следующей проблемой. Выдача больших файлов из БД. Есть следующий код

PHP:
скопировать код в буфер обмена
  1.  
  2. function get_file($sql){
  3.        
  4.        
  5.         try
  6.         {
  7.             $res = @mssql_query($sql);
  8.         }
  9.         catch (Exception $e)
  10.         {
  11.             echo $e->getMessage();
  12.         }
  13.         if (mssql_num_rows($res))
  14.         {
  15.             $row = mssql_fetch_array($res);
  16.             header('Accept-Ranges: bytes');
  17.             header('Content-Type: application/force-download');
  18.             header('Content-Length: ' . $row[2]);
  19.             header('Connection: close');
  20.             header('Content-Disposition: attachment; filename="' . $row[0]. '";');
  21.             echo $row[1];
  22.             exit();
  23.            
  24.         }
  25.  
  26.  
  27.  


CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. $sql = "select Link,FileData, datalength(FileData) as countdata from tbl_FileInContract fc
  5.                                                left join
  6.                                                tbl_Files as f on f.ID = fc.FileID
  7.                                                left join
  8.                                                tbl_Contract as c on c.ID = fc.ContractID
  9.                                                where fc.FileID='".$file_id."'";
  10.  
  11.  
  12.  


При скачивании файлов размером до 30 мб вроде как работает. Если файл больше то просто сбрасывает соединение и все. Подскажите как можно реализовать выдачу больших файлов из BLOB полей базы. Есть тема чтобы сохранять во временный файл и выдавать по частям но возможно есть другой вариант?
При увеличении memory_limit до 300М проблема решается но это мне кажется не есть хорошо. как я понял для выполнения запроса из бд большой объем памяти.
2. Мелкий - 16 Февраля, 2012 - 13:27:26 - перейти к сообщению
Не хранить файлы в базе вовсе. А только ссылки на файлы.
3. tux - 16 Февраля, 2012 - 13:50:00 - перейти к сообщению
Мелкий пишет:
Не хранить файлы в базе вовсе. А только ссылки на файлы.

Это конечно выход. Просто в общем то данный web интерфейс одной из CRM систем в которой изначально логика была построенна на хранинии файлов в БД. Хотелось бы именно совет выйти из данной ситуации радикально не переделывая систему? А да забыл сказать что СУБД MSSQL server 2008

 

Powered by ExBB FM 1.0 RC1