Artykuły na każdy temat
[PHP] Losowy (dynamiczny) avatar na forum dyskusyjne
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:
<?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 */ 1 == 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:
<?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.
Komentarze
Dodaj komentarz
CapaciousCore