Vlastní ICQ status v PHP - Krutá realita

Vlastní ICQ status v PHP

09.04.2005

icq-status-php

Chtěli jste si někdy na web přidat vlastní ikonku se statusem icq? Tak si přečtěte tento návod s přímou ukázkou zdrojových kódů

Zjištění stavu

function icq_online($icq_number){ if($fp = fsockopen("status.icq.com", 80)){ stream_set_timeout($fp, 2); fputs($fp, "GET /online.gif?icq=".$icq_number."&img=5 HTTP/1.0\r\n\r\n"); $s=''; while($line=FGetS($fp,3)){ $s.=$line; } return ereg('online1.gif',$s) ? true : false; } else { return false; } }

Tato funkce zjistí odpověď ze serveru ICQ a pomocí hlavičky zjistí, zda-li jste on-line nebo off-line. Vrací hodnotu true nebo false. Samozřejmostí je nastavení timeoutu, který zajistí, že pokud nebude možné se připojit na server ICQ do 2 sekund, automaticky se budete považovat za off-line.

Zobrazení obrázku a cache

function get_icq_status($icq_number){ $lifetime = 600; $cur = dirname(__FILE__).DIRECTORY_SEPARATOR; $status = $cur.'status.png'; $online = $cur.'online.png'; $offline = $cur.'offline.png'; if(!file_exists($status) || time()-filemtime($status)>$lifetime){ if(icq_online($icq_number)){ copy($online, $status); } else { copy($offline, $status); } chmod($status, 0777); } header('Pragma: no-cache', true); header('Content-type: image/png', true); echo file_get_contents($status); exit(); }

Aby se stav nezjišťoval po každém načtení stránky (což by bylo pěkně pomalé a zvyšovalo by to zátěž serveru), tak se zkopíruje vámi nadefinovaný obrázek do souboru status.png, u kterého se zjišťuje a porovnává datum jeho vytvoření. Je-li soubor starší než 10 minut, aktualizuje se.

Ukázka ke stažení

Kód, který používám na mém serveru již měsíc bez sebemenších výkonnostních problémů si můžete stáhnout jako icq_status.zip [11 kB]

Zdroj

Část kódu byla převzata a upravena z vynikajícího PIFíkova weblogu PHP weblog

Přidat komentář

:-D 8-) :-) ;-) :-o :-( :evil: :idea:

Pro příspěvky je vyžadována podpora obrázků

Pro ověření zde prosím napište text, který vidíte na obrázku

Re: Vlastní ICQ status v PHP od Llaik

09.04.2005 #

Misto ereg() bych pouzil radeji strpos() - je to vyrazne rychlejsi.
Ale diky zminene cache se to srovnava, hezke pocteni  :)

Re: Vlastní ICQ status v PHP od llook

19.04.2005 #

Navíc ten ereg není binary-safe. Teď si nejsem jistý, jestli to neplatí jenom na patterny, ale mám dojem, že veškeré testování končí na prvním null byte v řetězci (protože interně POSIXový regexp pracuje s céčkovskými null-terminated řetězci).

Re: Vlastní ICQ status v PHP od Torai

01.09.2005 #

šel by zobrazit i stav INVISIBLE?