ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Неьольшой совет для всех Cms креатеров
  #1  
Старый 19.05.2006, 09:21
Аватар для Trinux
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме:
941818

Репутация: 569


По умолчанию Неьольшой совет для всех Cms креатеров

Многие из нас делают свои CMS системы или форумы или что-то в этом духе. У меня нет своей CMS и я не планирую ее написание. Я против двойников в сети, за уникальность. Но ресь сейчас не обо мне =)))

Хотел поделиться опытом отображения аватаров в комментах. Задача простая и на первый взгляд решается очень просто.
Начнем с того что НИКАКИХ НАХ БД для этого не нужно. Забудте. Писать адрес аватара пользователя и его наличие в БД, все равно что менять цвет текст на странице вот этим вот скриптом.
Проще кидать ее в диру, например, /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'>)
PHP код:
.avatar{
width:100px;
height:100px;
display:block;
background:url('/img/noavatar.jpg'no-repeat;

Т.е. картинка с аватаром разширяется до размеров 100х100 и в бэк заливается картинка /img/noavatar.jpg. Если чел залил аватар - то поверх бэка появится его аватар, если же нет - аватар будет /img/noavatar.jpg

Вроде все =)
 
Ответить с цитированием

  #2  
Старый 19.05.2006, 09:31
Аватар для Егорыч+++
Егорыч+++
Administrator
Регистрация: 27.05.2002
Сообщений: 1,241
Провел на форуме:
20377164

Репутация: 0


По умолчанию

Думаю что быстрее будет, когда известно есть аватар или нет. Пусть это и БД. Если этого нет то по любому проверка наличия картинки займет время.

На второй случай апач вообще разорется в файле с ошибками. Про первый не знаю, но думаю там тоже осова в определении ошибки.

Но воовще говоря есть еще третий способ.

Для всех пользователей заливаем поумолчанию аватар. Тогда у всех аватар будет присутствовать.

Последний раз редактировалось Егорыч+++; 19.05.2006 в 09:36..
 
Ответить с цитированием

  #3  
Старый 19.05.2006, 10:05
Аватар для Trinux
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме:
941818

Репутация: 569


По умолчанию

С БД всегда уникальный подход. Насколько быстро будет проверка зависит не только от индексов. А, к примеру, насколько часто обращаются к этой таблице, насколько часто изменяются в ней данные и прочее.
Хотя насчет второго способа - ты прав. Апач ругаться будет.
Первый способ точно быстрее будет. Да, в конфиге ты прописываешь условие. Если по данному адресу ошибка - отображаем этот файл. Но это явно быстрее работает, чем запуск php и коннект к mysql. Насчет второго надо подумать, наверника можно как-то отключить запись подобных ошибок в лог.

Предложенный тобой способ тоже универсальный и достаточно простой и эффективный. Впринципе, стандартный аватар гифовый какой-нить простой будет всить меньше кила, поэтому в данном примере избыточность от веса неиспользуемых аватаров можно взять за материальную точку =)))
 
Ответить с цитированием

  #4  
Старый 19.05.2006, 12:19
Аватар для Li4inka
Li4inka
Banned
Регистрация: 14.05.2006
Сообщений: 8
Провел на форуме:
45799

Репутация: -10
По умолчанию

почему в бд нельзя хранить имя файла с картинкой (при отсутствии пусть там null будет)? тогда при заливке делаем апдейт (сразу исключаем дальнейшие проверки типа file_exists), а для отображения просто не будет делать отдельный запрос к бд, дополнительная колонка в select не сделает лишней нагрузки
такой запрос будет всегда:
select nick_name, login, user_posts from users where user_session='tratata';
что мешает сделать сроазу
select nick_name, login, user_posts, kartinka from users where user_session='tratata';
ну и дальше <img src=<?$rows['kartinka']?>> типа того.
хотя "проверка" на стороне клиента очень прикольная и ещё думаю не хорошо решать проблемы на более низком уровне (веб-сервера) лучше ограничеваться возможностями пхп.
 
Ответить с цитированием

  #5  
Старый 19.05.2006, 12:49
Аватар для Егорыч+++
Егорыч+++
Administrator
Регистрация: 27.05.2002
Сообщений: 1,241
Провел на форуме:
20377164

Репутация: 0


По умолчанию

Цитата:
Сообщение от Li4inka  
почему в бд нельзя хранить имя файла с картинкой (при отсутствии пусть там null будет)? тогда при заливке делаем апдейт (сразу исключаем дальнейшие проверки типа file_exists), а для отображения просто не будет делать отдельный запрос к бд, дополнительная колонка в select не сделает лишней нагрузки
такой запрос будет всегда:
select nick_name, login, user_posts from users where user_session='tratata';
что мешает сделать сроазу
select nick_name, login, user_posts, kartinka from users where user_session='tratata';
ну и дальше <img src=<?$rows['kartinka']?>> типа того.
хотя "проверка" на стороне клиента очень прикольная и ещё думаю не хорошо решать проблемы на более низком уровне (веб-сервера) лучше ограничеваться возможностями пхп.
Сам селект лишний для отображения коментов он в принципе не нужен. Тем более придется делать как у тебя запрос по каждому пользователю.
 
Ответить с цитированием

  #6  
Старый 19.05.2006, 15:13
Аватар для Trinux
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме:
941818

Репутация: 569


По умолчанию

2 Li4inka
Цитата:
такой запрос будет всегда:
select nick_name, login, user_posts from users where user_session='tratata';
Поднял десяток проектов. Из них крупные и мелкие - не суть. Нигде не хроню сессии в БД, ни на одном проекте, таких запросов никогда не будет =)
И еще по поводу null. Null это, конечно, хорошо, но приводит к потери данных при определенных условиях. Да и потом он немного коверкает смысл реляционных систем и вообще его использовать не советуют.
А насчет низкого уровня... Как ты себе это представляешь? Приходит запрос от браузера. Его обрабатывает web-сервер, в какой-то момент отдает его на растерзание php, тот, в свою очередь, коннектится к бд и решает отображать тебе картинку или нет. В другом случае запрос, пришедший от браузера полностью обрабатывается web-сервером, не запуская php и не коннетясь к БД.

Хотя опять ж этот способ хорошь лишь в том случае, если есть доступ к администрированию сервера.
 
Ответить с цитированием

  #7  
Старый 19.05.2006, 16:14
Аватар для ferryman
ferryman
Познающий
Регистрация: 13.02.2006
Сообщений: 88
Провел на форуме:
304371

Репутация: 16
Отправить сообщение для ferryman с помощью ICQ
По умолчанию

Цитата:
user_session='tratata';
- здесь скорее всего храниться session_id(), больше ничего...
 
Ответить с цитированием

  #8  
Старый 19.05.2006, 16:47
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
почему в бд нельзя хранить имя файла с картинкой (при отсутствии пусть там null будет)?
А зачем? Неужели текстовый поиск делать по базе будешь? =)
 
Ответить с цитированием

  #9  
Старый 19.05.2006, 16:48
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
У меня нет своей Cms и я не планирую ее написание.
а ннм.ру не ты писал?
 
Ответить с цитированием

  #10  
Старый 19.05.2006, 16:58
Аватар для Li4inka
Li4inka
Banned
Регистрация: 14.05.2006
Сообщений: 8
Провел на форуме:
45799

Репутация: -10
По умолчанию

2nerezus а при чем тут поиск? я и не предлагаю ничего искать по тексту. с запросом я переборщил, но суть остается. я хотел сказать, что добавка в селекте одной колонки впринципе работоспособности не изменит, тем более, что запрос у нас возвратит не более одной строки.

Последний раз редактировалось Li4inka; 19.05.2006 в 17:00..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание сети: обжимка проводов petrovich-lamer Windows 13 02.07.2007 13:18
Софт для мобильных телефонов под *nix Grrl Сотовый фрикинг 2 02.03.2007 01:47
«Лаборатории Касперского»: Количество вредоносных программ под Linux резко возросло dinar_007 Мировые новости 9 20.08.2006 20:50
какОй трой ИСпоЛЬзоваТЬ длЯ поЛНого УПРАвЛЕиЕ уд.КОМПОМ? UnKn0wN E-Mail 32 08.04.2006 04:20
Права потребителя мобильника novichok Сотовый фрикинг 1 25.03.2006 20:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ