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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка при отображении на WEB стринице загруженного из БД изображения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Ошибка именно в отображении, а не получении из БД
shurik_7866
Отправлено: 11 Июля, 2015 - 19:44:56
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Ошибка при попытке получить из базы и отобразить изображение
http://os7866[dot]co[dot]ua/scripts/get_[dot][dot][dot]g.php?image_id=1

При загрузке через FireFox выдает ошибку "Изображение 'http://os7866.co.ua/scripts/get_img.php?image_id=1' не может быть загружено так как содержит ошибки.

При загрузке через google chrome просто вместо изображения отображается маленький квадратик

На форумах в интернете пишут что ошибка связана с тем что изображение загрузилось не поностью

Для того что бы проверить добавил фрагмент кода по сохранению полученного изображения из БД на диск
PHP:
скопировать код в буфер обмена
  1. $dst = fopen("loaded_img.JPG","w");
  2. fwrite($dst, $image["image_data"]);
  3. fclose($dst);

Изображение на диск сохранилось полностью и без глюков: http://os7866[dot]co[dot]ua/scripts/loaded_img[dot]JPG

То есть ошибка связано исключительно с отображением изображения .
Не хотелось бы каждый раз при отображении изображения из БД сначала сохранять на диск

Подскажите кто знает, с чем связана ошибка.

Ниже привожу скрипт по загрузке картинки
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once "../../param.php";
  3.  
  4. mysql_connect(DB_HOST, DB_USER, DB_PASSW) or
  5. die("<p>Ошибка подключения к серверу MySQL: ".mysql_error()."</p>");
  6.  
  7. mysql_select_db(DB_NAME) or
  8. die("<p>Ошибка подключения к базе данных: ".mysql_error()."</p>");
  9.  
  10. if (!isset($_REQUEST["image_id"])) die("<p>Ошибка: не указано image_id</p>");
  11. $image_id = $_REQUEST["image_id"];
  12.  
  13. $query = sprintf("select * from images where image_id = %d;", $image_id);
  14. $result = mysql_query($query);
  15. if (!$result) die("<p>Ошибка при выполнении запроса: ".mysql_error()."</p>");
  16. if (mysql_num_rows($result) == 0) die("<p>Отсутствует изображение с image_id = {$image_id}</p>");
  17. $image = mysql_fetch_array($result);
  18.  
  19. //-----------------------------------------
  20. $dst = fopen("loaded_img.JPG","w");
  21. fwrite($dst, $image["image_data"]);
  22. fclose($dst);
  23. //-----------------------------------------
  24.  
  25. header('Content-type: ' . $image['mime_type']);
  26. header('Content-length: ' . $image['file_size']);
  27. echo $image["image_data"];
  28. ?>
 
 Top
Viper
Отправлено: 11 Июля, 2015 - 22:57:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




shurik_7866 описание к fopen внимательно читали? Очень внимательно?
Абзацы "Замечание: " почитайте ещё раз.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
shurik_7866
Отправлено: 12 Июля, 2015 - 16:51:15
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Viper пишет:
shurik_7866 описание к fopen внимательно читали? Очень внимательно?
Абзацы "Замечание: " почитайте ещё раз.


Фрагмент кода
PHP:
скопировать код в буфер обмена
  1. $dst = fopen("loaded_img.JPG","w");
  2. fwrite($dst, $image["image_data"]);
  3. fclose($dst);

только для того чтобы убедиться что изображение из базы в переменную считано, что успешно проверено http://os7866[dot]co[dot]ua/scripts/loaded_img[dot]JPG

При чем сдесь какие то особенности функции fopen, если изображение извлеченное из БД было успешно сохранено на диск? С fopen никаких проблем.
 
 Top
Viper
Отправлено: 12 Июля, 2015 - 17:25:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Ок. Как сохраняете изображение в БД?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
shurik_7866
Отправлено: 12 Июля, 2015 - 17:38:43
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Viper пишет:
Ок. Как сохраняете изображение в БД?


PHP:
скопировать код в буфер обмена
  1.     <?PHP
  2.  
  3.       $error_code=isset($_FILES["user_pic"]["error"]) ? $_FILES["user_pic"]["error"]: -1;
  4.       if ($error_code == 0){
  5.         if (@is_uploaded_file($_FILES["user_pic"]["tmp_name"])){
  6.           if (@getimagesize($_FILES["user_pic"]["tmp_name"])){
  7.             $filename = $_FILES["user_pic"]["name"];
  8.             $mime_type = $_FILES["user_pic"]["type"];
  9.             $file_size = $_FILES["user_pic"]["size"];        
  10.             $image_data = file_get_contents($_FILES["user_pic"]["tmp_name"]);
  11.                              
  12.             $filename=mysql_real_escape_string($filename);
  13.             $mime_type=mysql_real_escape_string($mime_type);
  14.             $image_data=mysql_real_escape_string($image_data);
  15.             $query = "insert into images(filename, mime_type, file_size, image_data) ".
  16.                       "values('{$filename}', '{$mime_type}', {$file_size}, '".$image_data."');";
  17.                          
  18.             mysql_query($query)
  19.             or die("<p>Ошибка при вставке в таблицу images: ".mysql_error()."</p>");
  20.           }
  21.           else{//error_block
  22.             $error_code = -1;
  23.             $error_msg = "Ошибка: загруженный файл не является изображением";                
  24.           }
  25.         }
  26.         else{//error_block
  27.           $error_code = -1;
  28.           $error_msg = "Ошибка: файл был загружен не через HTTP POST";        
  29.         }
  30.        
  31.       }
  32.      ?>
 
 Top
Мелкий Супермодератор
Отправлено: 12 Июля, 2015 - 18:06:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Сохраните вывод скрипта и посмотрите бинарник hex-редактором.
Наиболее вероятно, что там какой-то лишний вывод.


-----
PostgreSQL DBA
 
 Top
shurik_7866
Отправлено: 12 Июля, 2015 - 18:11:50
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Сохраните вывод скрипта

А как сохранить вывод скрипта?
 
 Top
Мелкий Супермодератор
Отправлено: 12 Июля, 2015 - 18:18:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Что значит "как"?
Любым HTTP-клиентом запрашиваете скрипт и сохраняете ответ.


-----
PostgreSQL DBA
 
 Top
shurik_7866
Отправлено: 12 Июля, 2015 - 18:41:37
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Да, сохранил(Сохранить страницу как), страница сохранилась как файл с расширением jpg. Но при попытке посмотреть как изображение jpg выдало ошибку - просмотр недоступен
посмотрел HEX редактором

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

CODE (htmlphp):
скопировать код в буфер обмена
  1. EF BB BF            п»ї................                    лишние
  2. .
  3. .
  4. 35 FF D9            ..............5яЩ                    отсутствуют


После удаления лишних символов в начале файла, файл стал открываться как картинка.

Но пока не понятно - чего добавляются эти символы
 
 Top
Мелкий Супермодератор
Отправлено: 12 Июля, 2015 - 18:44:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




BOM-метка UTF-8.
Сохраните скрипт без BOM.

Последние 3 байта отсутствуют из-за заявленного Content-length. Скрипт отправил всё, но клиент в сумме с BOM получил больше обещанного и отбросил лишнее.


-----
PostgreSQL DBA
 
 Top
shurik_7866
Отправлено: 12 Июля, 2015 - 19:06:24
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Сохраните скрипт без BOM.

Перекодировал скрипт из UTF-8 в UTF-8 без BOM и заработало. Теперь скрипт http://os7866[dot]co[dot]ua/scripts/get_[dot][dot][dot]g.php?image_id=1 показивает изображение.

Спасибо.

Проблема решена.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB