Перейти к содержимому



Проблема с header

#1 Kuchuluk
Kuchuluk
  • Неактивные
  • 333 сообщений
  • Репутация: 5
0

Обновлено 28 марта 2013 - 19:34  Отправлено 24 марта 2013 - 21:01

у пользователя на сайте есть аватар. На странице пользователя нужно выводить уменьшенный размер аватара, я уменьшаю его таким образом
$src = "sys-images/no-avatar.gif"; // исходный файл
   $size = getimagesize($src);
   header("Content-type: {$size['mime']}");
   $icfunc = imagecreatefromgif($src);
   $idest = imagecreatetruecolor(60,60);
   $im = imagecopyresampled ($idest, $icfunc, 0, 0, 0, 0, 60, 60, $size[0], $size[1]);
   var_dump($im);
   $small_ava = imagegif($idest);
return $small_ava;
потом этот метод применяю в html документе
$avatar = $us_info->selAva();
   echo $avatar;
выдает ошибку Warning: Cannot modify header information - headers already sent by (output started at Z:homelocalhostwwwpartydoctype-head.php:10) in Z:homelocalhostwwwpartyclassesuser_info.php on line 40 ... Я знаю что header нужно выполнять до вывода в браузер, но мне нужно выводить маленький аватар именно в этом месте документа. Как можно обойти эту проблему? Я пробовал сначала вызывать метод в самом начале документа, а выводить там, где нужно, но тогда вообще пустая страница выводится. Как с этим heder-ом быть? Может вместо нее есть другая функция для отправки заголовков, кто знает?

 

 

  • 0

#2 isvetlichniy
isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 25 марта 2013 - 00:02

уже обсуждалась такая проблема касательно функции header, читаем вот тут

я вот только не понял, если известно местоположение этой картинки, почему не использовать тег img и в нем изменить размер картинки?
  • 0

#3 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 25 марта 2013 - 00:22

я вот только не понял, если известно местоположение этой картинки, почему не использовать тег img и в нем изменить размер картинки?

в тегах то можно прописать размеры в пикселях только один раз. а соотношение длины и ширины у миниатюры может быть разным в зависимости от соотношения длины и ширины реальной фотографии. Этот скрипт я еще дорабатывать буду, чтобы длина и ширина миниатюры вычислялись, просто я сейчас на этом заступорился.
  • 0

#4 isvetlichniy
isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 25 марта 2013 - 00:53

а соотношение длины и ширины у миниатюры может быть разным в зависимости от соотношения длины и ширины реальной фотографии

я делаю так:
img {
max-width: 100px;
max-height: 100px;
}

в результате ширина и высота будут изменены пропорционально оригиналу

и еще один нюанс, твой скрипт может не работать на некоторых серверах, так как использование функция типа imagecreatefromgif подразумевает сборку PHP с библиотекой GD

P.S. я ни в чем не убеждаю, а предлагаю свой вариант решения :)
  • 0

#5 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 25 марта 2013 - 11:24

так а если картинка не квадратная, а прямоугольная?


  • 0

#6 isvetlichniy
isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 25 марта 2013 - 11:47

пропорции все равно будут сохранятся, ты попробуй, поэкспериментируй
с этим

img {
max-width: 100px;
max-height: 100px;
}

здесь 100px это чисто условно, можешь выбрать другие значения
  • 1

#7 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 25 марта 2013 - 12:40

спасибо, попробую


  • 0

#8 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 25 марта 2013 - 20:19

isvetlichniy, а если загружаемой фотографии сразу делать и сохранять уменьшенную копию при загрузке, и под эти уменьшенные копии сделать отдельную таблицу в базе? или так не делают на сайтах?
  • 0

#9 isvetlichniy
isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 25 марта 2013 - 22:25

тоже вариант, это будет даже лучше.Хотя все зависит от нагрузки на сайт.

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


  • 0

#10 html-ka
html-ka
  • Неактивные
  • 455 сообщений
  • Репутация: 82

Отправлено 26 марта 2013 - 15:38

не совсем понимаю, а зачем в эту функцию header пихиать? :)
  • 0

#11 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 26 марта 2013 - 18:43

не совсем понимаю, а зачем в эту функцию header пихиать? :)

по умолчанию PHP передает заголовок Content-type: text/html, в данном случае это не подходит, так как браузер должен понимать с каким типом данных он работает
  • 0

#12 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 28 марта 2013 - 15:48

Зачем в документ типа text/html вставлять заголовки от документов другого типа?

Вы определитесь, что создаете. Либо хтмл-вский документ, тогда у вас будет заголовок Content-type: text/html и никаких картиночных заголовков там быть не должно, либо это картинка, тогда у документа будет заголовок от картинки.

Если же вы хотите в хтмл-е разместить картинку, так и размещайте ее по правилам хтмл-а — через тег <img src=""> и уже в параметре src ссылайтесь на картинку, у которой будет соответствующий вашему изображению header.


  • 1

#13 html-ka
html-ka
  • Неактивные
  • 455 сообщений
  • Репутация: 82

Отправлено 28 марта 2013 - 16:56

yury, я ж о том же ))
  • 0

#14 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 28 марта 2013 - 16:57

yury, вы суть проблемы не поняли. На сервере хранятся аватары пользователей таких размеров, какими они их загрузили. Миниатюра формируется на лету функцией imagecopyresampled, которой для корректной работы нужно передавать заголовок картинки: text/gif, text/jpeg и т.д. Это делается в отдельном методе, который вызывается как раз в параметре src тега img. Но до вызова этого метода уже происходит вывод на экран, поэтому header не срабатывает, и следовательно и функция imagecopyresampled не срабатывает некорректно - вместо картинки выводятся квакозавры.
Но я эту проблему уже решил по-другому, при загрузке пользователем аватары сразу создается миниатюра и сохраняется на сервер.


  • 0

#15 html-ka
html-ka
  • Неактивные
  • 455 сообщений
  • Репутация: 82

Отправлено 28 марта 2013 - 17:29

ну так в чем проблема, скорее всего ты все свалил в кучу и создание и вывод, просто сначала одним методоам создай аватарку или массив с аватарками, а потом его выведи где и кгода нужно, оnдели View от всего остального
  • 1

#16 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 28 марта 2013 - 18:53

не записывая в файл?


  • 0

#17 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 28 марта 2013 - 19:15

Это делается в отдельном методе, который вызывается как раз в параметре src тега img.

Это неправильно. В src должен указываться файл, содержащий картинку. Хотите создать его средствами PHP — создавайте: специальным файлом-скриптом с соответствующим создаваемому изображению заголовком и этот файл указывайте в src.
  • 1

#18 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 28 марта 2013 - 19:19

понял, спасибо. еще вопрос - я читал, что функция imagecopyresampled очень ресурсоемкая. Если ее нужно использовать несколько раз на одной странице, это нормально? например, если выводятся несколько мини-аватарок других пользователей


  • 0

#19 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 28 марта 2013 - 19:34

еще вопрос - я читал, что функция imagecopyresampled очень ресурсоемкая. Если ее нужно использовать несколько раз на одной странице, это нормально?

Нет.
Все зависит от требований по качеству и кол-ва превьюшек.Если качество не сильно важно, а картинок много — можно использовать не такую ресурсоемкую функцию imageCopyResized. Если же и превьюшек много и обязательно нужно хорошее качество, то лучше заранее создавать и хранить файлы с превьюшками (и при последующих запросах просто отдавать готовый результат).
  • 0

robot
robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
Megoydagi Megoydagi 1-й за Август
Очков активности: 30 4 темы, 8 сообщений, 1 балл репутации
Сайт: bank.net.ru
ТОП самых активных за этот месяц
  • Фотография Vmir
    #1

    Vmir
    Очков активности: 22.5 3 темы, 6 сообщений, 1 балл репутации

  • Фотография kuztoday
    #2

    kuztoday
    Очков активности: 10.5 1 тема, 4 сообщения, 1 балл репутации

  • Фотография mkreine
    #3

    mkreine (analiz-krovi.net)
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография kolver
    #4

    kolver
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография Megoydagi
    #5

    Megoydagi (bank.net.ru)
    Очков активности: 9 Вне конкурса за определение пользователя месяца

  • Фотография Totti
    #6

    Totti
    Очков активности: 7.5 0 тем, 5 сообщений, 1 балл репутации

  • Фотография BLIK
    #7

    BLIK
    Очков активности: 7.5 Вне конкурса за определение пользователя месяца

  • Фотография Zevss
    #8

    Zevss (domles43.ru)
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Фотография fedornabilkin
    #9

    fedornabilkin (plohoneponyal.ru)
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Фотография SergiuS85
    #10

    SergiuS85
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Показать весь ТОП 10

Поддержите форум! =)
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru