Projektowanie stron WWW od podszewki
Losowy artykuł: Sezon 2011

Artykuły na każdy temat

[PHP] Losowy (dynamiczny) avatar na forum dyskusyjne

Dodano 11.08.2013r. o 16:10
Od jakiegoś czasu stosuję losowy avatar w swoim profilu chociażby na forumweb. Chociaż nie muszę, bo grubo od ponad roku FW jest zintegrowane z wyżej wymienionym systemem to jednak dostrzegam pewną wygodę i przewagę z tego tytułu. Z tego co pamiętam to Gravatar nie posiada chociażby możliwości wyświetlania losowego avatara z listy, która użytkownik przekazał lecz wyświetla jeden zdefiniowany. Jak dobrze pamiętam to kropek4767 jako pierwszy zastosował u nas ten trick. Coś tam nawet wspominał o nim np. tutaj. Ponieważ czasami mi się nudzi i lubię usprawniać rozwiązania stąd udostępnię swoje. Po pierwsze prosta regułką mod_rewrite:
Kod:
RewriteRule ^avatar_([a-z0-9]{32})\.png$ mysterious-path/avatar.php?target=$1[L]
dzięki której możemy skrócić adres, a po za tym rozwiązać problem rozszerzenia gdyż skrypty for dyskusyjnych zazwyczaj nie pozwalają na rozszerzenie php w adresie zewnętrznego avatara. Swoją drogą można powiększyć regułkę o rozszerzenia np. gif i jpg choć to nie jest konieczne gdyż dla przeglądarki liczy się przesłany nagłówek właściwie. W efekcie wychodzi coś takiego. Ten hash w adresie jest istotny gdyż mamy kontrolę nad tym skąd (np. z jakiego forum) przychodzi zapytanie. Przy próbie manipulacji rzecz jasna wszystko się posypię (można sprawdzić) i dalej mamy esencję czyli skrypt:
Kod:
<?php
// Config
$config['dir']['root'] = 'images';
$config['dir']['images'] = array('blue''green''pink''purple''red''yellow');
$config['expansions'] = array('gif');
$config['random_avatar'] = true;
// Necessary things
include './targets.php';

$key array_search($_GET['target'], $targets);

if(is_int($key))
{
 if(/* Detekcja ciekawych osób */ == 2)
 {
  // header("WWW-Authenticate: Basic realm=Niedobry_Sobak");
  $img './'.$config['dir']['root'].'/sobak.jpg';
 }
 else if($config['random_avatar'])
 {
  $tmp['file_list'] = glob('./'.$config['dir']['root'].'/{'.implode(','$config['dir']['images']).'}/*.{'.implode(','array_unique(array_map('strtolower'$config['expansions']))).'}'GLOB_BRACE);
  $tmp['how']['images'] = count($tmp['file_list']);
  $img $tmp['file_list'][array_rand($tmp['file_list'])];
 }
 else
 {
  $img './'.$config['dir']['root'].'./base.png';
 }

 header('Content-Type: image/png');
 readfile($img);
}
else
{
 die('Are you looking for something?');
}
?>
Dodatkowo potrzebujemy zawartość pliku targets.php czyli właściwie tablicy $targets, która wygląda następująco:
Kod:
<?php
$targets[0] = '098f6bcd4621d373cade4e832627b4f6'// test
// ciach, inne tajemnicze wartości
?>
@Kropek w swoim rozwiązaniu umożliwił nawet wybór avataru przez użytkownika. Tutaj tego nie ma choć oczywiście można dobudować albo co lepsze umożliwić wrzucenie zdefiniowanego przez użytkownika. Tak to właśnie w skrócie wygląda.

W kodzie widzicie zakomentowane wysłanie nagłówka. Myślę, że gdyby był odkomentowany i wyrzucany do wszystkich to raz dwa zaraz administrator zablokowałby możliwość używania zdalnych avatarów, bo by takie okienko jak na zamieszonym poniżej filmie denerwowało każdorazowo odwiedzającego. Ot pewna metoda na zatruwanie życia.


Fragment z detekcja Pana @Sobak'a oczywiście usunąłem, bo po co instruować jak kogoś szpiegować przy pomocy avatara. Po za tym usunięty został fragment logujący każde wyświetlenie avatara Smile

Zalety

Plus Zarządzanie/kontrolowanie (np. rozmiarem, tym co ma być wyświetlane) avatarem z jednego miejsca
Plus Możliwości sporządzania statystyk
Plus Możliwości szpiegowania określonego użytkownika
Plus Elastyczność
Plus Niezależność od Gravatar'a
Plus Nie wszystkie fora dyskusyjne są zintegrowane z systemem Gravatar
Plus Inne których teraz nie pamiętam

Wady

Minus Wymagana włączona opcja avataru zdalnego na forum gdzie chcemy skorzystać ze swojego rozwiązania (standardowo ta opcja jest włączona)
Minus W przypadku niedostępnego serwera, na którym działa skrypt avatar nie będzie się wyświetlać - wyjątkiem od tej sytuacji jest mechanizm balansujący ruch między serwerami

PS
Gotowy skrypt można dostać w odpowiednim dziale Wink

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 30.12.2015r. o 14:44
@kropek4767 a mi się zawsze właśnie wydawało, że byłeś to Ty no ale spoko Wink

kropek4767

Dodano 01.12.2015r. o 13:32
Chciałbym tylko sprostować, że pierwszą osoba, która zastosowała dynamiczny awatar na forumweb.pl był firex (obecnie xerif).

CapaciousCore

Dodano 12.08.2013r. o 10:52
@Sobak czy jest to sugestia jakobym miał zdjąć tamten bajer? Wszak żadne SC tutaj nie zaglądają, bo mają bana Sad A seryjnie to Ci powiem, że to szybko admini by wyeliminowali przez bany i heya banana.

Sobak

Dodano 12.08.2013r. o 10:33
Yay, jestem ciekawą osobą Very Happy A tak poważniej: opcja jest interesująca i ma szerokie możliwości o których wspomniałeś, wykraczające poza możliwość umieszczenia losowo zmieniającego się avatara. Jedyne czego się obawiam to właśnie natrętne script kiddies, które podpatrując myk z wywołaniem autentyfikacji HTTP będą wkurwiać wszystkich administratorów, co skończy się całkowitą blokadą zdalnych avatarów.

Może pójdziesz krok dalej i zaczniesz dynamicznie generować avatar na podstawie różnych danych? Very Happy też mogło by być ciekawe.

Swego czasu pracowałem nad sygnaturką właśnie na ForumWeb, która miała by wyświetlać tytuł najnowszego wpisu na moim blogu. Skończyłem rozwiązanie, a dopiero potem uświadomiłem sobie, że są narzucone dosyć restrykcyjne limity wymiarów obrazka (głównie rozbiło się o szerokość) ^^

sunpietro

Dodano 11.08.2013r. o 18:49
Fajna zabawka, ale avatar jest częścią identyfikacji użytkownika, a przynajmniej ich części. Coś takiego pewnie jest stosowane w serwisach udostępniających obrazki-zaślepki (placeholder) dla stron.

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)