Gravatary zprovozněny

The Zero, neděle 25. 2. 2007 - 02:56

Většina aspoň trochu propracovaných RS / CMS umožňuje zobrazovat nějaké obrázky identifikující uživatele. Většinou jsou to gravatary, ale můžeme narazit i různá zajímavá řešení, jako je například načítání favicon u Jakuba Vrány. Já jsem ale zůstal u standardu.

Věděl jsem však jedno: Chce to cache. Nechal jsem se inspirovat u dgx, ale s výjimkou rozpoznávání typu obrázku jsem si napsal cache vlastní.

Jak to funguje

Funguje to přesně tak, jak by mělo, a je to napsáno tak, jak to napsáno být má :). Hlavním rozdílem oproti skriptu od dgx je to, že obrázky nepodsouvá žádný externí skript, ale přímo do kódu komentáře se vloží URL uloženého gravataru. Tady pomáhá nově udělaná cache komentářů :).

Největším problémem bylo načítání souborů. Na hostingu je prozřetelně zakázáno načítání vzdálených souborů. To je sice obtíž, ale já to docela chápu a nestěžuju si. Naštěstí ale existuje cesta okolo. Představuji třídu getFile (píšu zásadně pro PHP 5, proto ta klíčová slova, ale mělo by to po menších úpravách běžet i ve čtyřce):

/**
* Načítání vzdálených souborů
*
* @author TheZero
* @license http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-Share Alike 3.0 License
*/

class getFile {
protected $content;
protected $header;
 
public function get($server, $uri, $referer=false) {
if($referer===false)
$referer='http://'.$server;
$socket = fsockopen($server, 80, $errno, $errstr, 12);
fputs($socket, "GET /".$uri." HTTP/1.0\r\n");
fputs($socket, "Host: ".$server."\r\n");
if($referer)
fputs($socket, "Referer: ".$referer."\r\n");
fputs($socket, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2\r\n\r\n");
$content = stream_get_contents($socket);
fclose($socket);
// ořežeme hlavičku
$delim=strpos($content, "\r\n\r\n");
$this->header=substr($content, 0, $delim);
$this->content=substr($content, $delim+4);
return $this->content;
}
 
public function getContent() {
return $this->content;
}
public function getHeader() {
return $this->header;
}
}

Jak to použít? Jednoduše.

$getfile=new getfile;
$img=$getfile->get('http://www.gravatar.com', 'avatar.php?gravatar_id='.$id.'&size=42&default=http://blog.thezero.info/avatar/data/empty.gif');

Poznámka: Lze to předělat tak, že byste parametry předali už konstruktoru, ale já to tak nemám z důvodu začlenění do frameworku, který pohání uDomain :).

Zařazeno do kategorií internet, O blogu, PHP.

Předchozí: Král je mrtev, ať žije král!

Následující: Jak jsem zase nezískal číslo

Komentáře

1. The Zero

25.02.2007 03:05:12

Tohle je test. :) Zároveň chci dodat dvě věci: Smazal jsem cache u všech komentářů, takže se to objeví i zpětně.
Ta druhá je, že gravatary zatím nejsou dokonale nastylovány. Pokud je text delší, tak se zobrazí i pod obrázkem. Dejte kdyžtak vědět, jestli to nechat, nebo s tím něco udělat ;)

Taky už jsem opravil text kurzívou.

2. MzK

25.02.2007 13:47:57

Pokus. Já používám zmíněný script od dgx, na tvůj se kouknu jestli je o tolik lepší aby stál za námahu měnit můj RS :)

3. The Zero

25.02.2007 13:51:53

[2] MzK No já jsem zatím ten skript nezveřejnil, jen tu třídu k načítání souborů. Ale tak nějak jsem to měl v plánu taky... :)

Přidat komentář

Jako heslo je to proto, že lze využít magic wand a odpověď se tak bude pamatovat.

Povolené tagy: b, i, q. Bez jakýchkoli atributů a řádně ukončené. URL se převádí automaticky.

Vyžadováno je pouze jméno (proto je zvýrazněné), text, kód (ten zadáváte jen s vypnutým JavaScriptem - jestli ho nevidíte, nemusíte se o něj starat. Poslední věc, kterou formulář vyžaduje, je stisknutí tlačítka Přidat.

* E-mail slouží především k načtení gravatarů. Zobrazovat se nebude.