Trinux
19.05.2006, 09:21
Многие из нас делают свои CMS системы или форумы или что-то в этом духе. У меня нет своей CMS и я не планирую ее написание. Я против двойников в сети, за уникальность. Но ресь сейчас не обо мне =)))
Хотел поделиться опытом отображения аватаров в комментах. Задача простая и на первый взгляд решается очень просто.
Начнем с того что НИКАКИХ НАХ БД для этого не нужно. Забудте. Писать адрес аватара пользователя и его наличие в БД, все равно что менять цвет текст на странице вот этим вот (http://forum.antichat.ru/thread19010.html) скриптом.
Проще кидать ее в диру, например, /img/avatars/ с id пользователя... например если зарегается чел с id=465 то его аватар будет по адресу /img/avatars/465.jpg к примеру.
При такой организации хранения аватаров мы не юзаем БД. Что дает нам большой плюс. Но столкнулся с другой проблемой...
Для проверки, есть ли аватар у пользователя, я раньше юзал file_exists(). Т.е. сначала проверяю, закачал ли пользователь аватар. Если нет - подставляю стандартный. file_exists() через какое-то время стало убивать файловую систему =) что и понятно =)) Тем более если аватаров очень много (рекомендуется разбивать диры на поддиры таким образом, чтобы в каждой дире было не более 5000 объектов). Нашел 2 решения, отказаться от file_exists().
1. Прописывать прямой путь до аватара пользователя, точнее путь, где он должен находится, если залит. nginx же, при отсутствии файла (мы вставляем тег <img> при отображении аватар, сооттветственно запрос идет на web сервер), подставляет стандартный. Делается это достаточно просто конфигом nginx`а.
2. Еще более простой и элегантный способ. Как и в прошлом - в <img src= прописывается путь до аватара, где он должен быть. В это же время CSS`ом задаем ледующие параметры к <img> с аватаром. Допустим, все аватары у нас идут с классом avatar (<img class='avatar'>)
.avatar{
width:100px;
height:100px;
display:block;
background:url('/img/noavatar.jpg') no-repeat;
}
Т.е. картинка с аватаром разширяется до размеров 100х100 и в бэк заливается картинка /img/noavatar.jpg. Если чел залил аватар - то поверх бэка появится его аватар, если же нет - аватар будет /img/noavatar.jpg
Вроде все =)
Хотел поделиться опытом отображения аватаров в комментах. Задача простая и на первый взгляд решается очень просто.
Начнем с того что НИКАКИХ НАХ БД для этого не нужно. Забудте. Писать адрес аватара пользователя и его наличие в БД, все равно что менять цвет текст на странице вот этим вот (http://forum.antichat.ru/thread19010.html) скриптом.
Проще кидать ее в диру, например, /img/avatars/ с id пользователя... например если зарегается чел с id=465 то его аватар будет по адресу /img/avatars/465.jpg к примеру.
При такой организации хранения аватаров мы не юзаем БД. Что дает нам большой плюс. Но столкнулся с другой проблемой...
Для проверки, есть ли аватар у пользователя, я раньше юзал file_exists(). Т.е. сначала проверяю, закачал ли пользователь аватар. Если нет - подставляю стандартный. file_exists() через какое-то время стало убивать файловую систему =) что и понятно =)) Тем более если аватаров очень много (рекомендуется разбивать диры на поддиры таким образом, чтобы в каждой дире было не более 5000 объектов). Нашел 2 решения, отказаться от file_exists().
1. Прописывать прямой путь до аватара пользователя, точнее путь, где он должен находится, если залит. nginx же, при отсутствии файла (мы вставляем тег <img> при отображении аватар, сооттветственно запрос идет на web сервер), подставляет стандартный. Делается это достаточно просто конфигом nginx`а.
2. Еще более простой и элегантный способ. Как и в прошлом - в <img src= прописывается путь до аватара, где он должен быть. В это же время CSS`ом задаем ледующие параметры к <img> с аватаром. Допустим, все аватары у нас идут с классом avatar (<img class='avatar'>)
.avatar{
width:100px;
height:100px;
display:block;
background:url('/img/noavatar.jpg') no-repeat;
}
Т.е. картинка с аватаром разширяется до размеров 100х100 и в бэк заливается картинка /img/noavatar.jpg. Если чел залил аватар - то поверх бэка появится его аватар, если же нет - аватар будет /img/noavatar.jpg
Вроде все =)