За последние 24 часа нас посетили 10007 программистов и 439 роботов. Сейчас ищут 132 программиста ...

Выгрузка фотографии из БД Firebird в файл

Тема в разделе "PHP и базы данных", создана пользователем Leke, 14 ноя 2017.

  1. Leke

    Leke Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте! Прошу камнями не кидаться, опыта в PHP нет. Задача такая: Из БД firebird "вытащить" список людей в CSV и сохранить фотографии из поля типа blob в отдельные файлы. С CSV разобрался, а вот при попытке сохранить содержимое из blob в file.jpg сохраняются файлы весом по 18 байт, с содержимым вида " 0х0001f40500000080 ". Как вытащить полноценную фотографию?
    Код (Text):
    1.  
    2. $stmt = "select * from pers where depid = 100";
    3. $sth = ibase_query ($dbh, $stmt) or die (ibase_errmsg());
    4. $row = ibase_fetch_object ($sth);
    5. While ($row)
    6. {
    7. $filename = $row->ID;
    8. $pic = $row->FACE;
    9. $file = fopen ('/.1/test/'.$filename.'jpg','wb');
    10. if (!$file)
    11.   {
    12.     echo('ошибка открытия файла');
    13.   }
    14.        else
    15.      {
    16.        fputs ($file,$pic);
    17.      }
    18.    fclose ($file);
    19.   $row = ibase_fetch_object($sth);
    20. }
    21. ibase_close ($dbh);
    22. ?>
     
  2. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.462
    Симпатии:
    541
    Адрес:
    Лень
    нечего делать изображениям в бд, у вас обрезок был сохранен
     
  3. Leke

    Leke Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    5
    Симпатии:
    0
    При обращении через web фотографии отображаются в полноценном размере.
     
  4. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.462
    Симпатии:
    541
    Адрес:
    Лень
    через веб абсолютным путем ? ну ? ясен прекрасен отобразится. Дело в другом - тело файла храните не на хостинге, а в бд.
     
  5. Leke

    Leke Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    5
    Симпатии:
    0
    Ну если на страницу выводится изображение, значит можно и в файл сохранить, я так думаю. Каким другим способом, кроме указанного мной выше, можно вытянуть изображение из BLOB?
     
  6. Sail

    Sail Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    96
    Симпатии:
    29
    @Leke, передайте функции запси в файл длину "строки" в байтах третьим параметром.
     
  7. Leke

    Leke Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    5
    Симпатии:
    0
    Уважаемый, подскажите как это сделать?
     
  8. Sail

    Sail Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    96
    Симпатии:
    29
    @Leke, для определения размера, занятого данными в поле BLOB FB советуют использовать функцию OCTET_LENGTH()
     
  9. Leke

    Leke Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    5
    Симпатии:
    0
    использовал OCTET_LENGTH(), получаю: 160535, т.е. точный вес фотографии, содержащийся в этом поле. Подставлял значение в fputs () третьим параметром, но в файл записывается лишь строка такого вида: "0x0000049d00000080", я так понимаю это лишь заголовок или ссылка или что вообще? В сети не нашел ответа.
     
  10. Sail

    Sail Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    96
    Симпатии:
    29
    @Leke, что покажет var_dump($pic); ? (интересна, собственно, длина причитанных из базы данных)
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    @Leke, дело в том, что у Вас скрипт может заканчивать работу раньше чем все данные будут записаны.
    Вот тут есть хорошие примеры и прочитайте замечания по работе данной функции.