php icq online


Umieszczone na serwerze AOL/Mirablis oprogramowanie pozwala wyświetlić nasz status (offline,online) na stronie WWW, jednak nie pozwala na wykorzystanie własnego tekstu/ grafiki - możemy wybierać jedynie z kilku predefiniowanych zestawów. Z pomocą PHP możemy jednak obejść te ograniczenie i wykorzystać dowolny tekst/ grafikę.

Ja co prawda jestem wielbicielem charakterystycznego "kwiatka", jednak z tego co słyszałem, wielu webmasterów chciałoby mieć możliwość zastosowania własnej grafiki. Przyjrzyjmy się więc bliżej naszemu problemowi.


To jest kod, jaki należy umieścić na stronie (oczywiście zamiast XXXXXX trzeba podać swój numer UIN a cyferka 5 odpowiada za styl wyświetlanego obrazka - też można wybrać coś innego). Jak widać kod jest dość prosty, jednak zmodyfikować zbytnio go się nie da :(. Z pozoru problem jest nie do rozwiązania - kod potrafi wyświetlić jedynie obrazek z predefiniowanego zestawu i tyle - usuńmy go więc, lub lepiej skomentujmy z poziomu php, bowiem przyda nam się adres tego skryptu.
?>

Zapewne co dociekliwsi/ bardziej zdesperowani użytkownicy spróbują wpisać podany w kodzie obrazka adres w pasek adresowy swej przeglądarki. Niestety, taka próba nie przybliży nas do niczego - w oknie browsera znów pojawi się "niechciany" obrazek prezentujący nasz status. Cóż więc robić? Zaglądamy do manuala PHP i... Eureka! Coś jest - dział Socket functions wydaje się opisywać funkcje nam przydatne. Spróbujmy więc skorzystać z funkcji fsockopen() (205890 to mój UIN):

error_reporting(0);
$fp = fsockopen ("wwp.icq.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "echo disabled(2)";
break;
}
else {
fputs ($fp, "GET /scripts/online.dll?icq=205890&img=5 HTTP/1.0\n\n");
while (!feof($fp)) {
$wynik = fgets ($fp,128);
echo $wynik;
}
fclose ($fp);
}
?>

I co się dzieje? Na ekranie wyświetlił się ciąg dziwnych znaczków w stylu:
HTTP/1.0 200 OK Content-type: image/gif GIF89a (ŽÔÓtR śóĄ# % áw` Ä…40 Ä„ ìtÄ„Wb¨Ã³Å„Å›çÄ

Cóż to jest? Ano można się domyślić, iż jest to obrazek (image/gif) wyświetlany jako nasz aktualny status. I w tym momencie jesteśmy już w domu - jak się zaraz przekonamy każdy obrazek będzie przedstawiony jako odmienny ciąg znaków - wystarczy więc przy pomocy instrukcji if lub switch sprawdzić wartość zmiennej $wynik i wyświetlić odpowiedni obrazek/ tekst. Najpierw sprawdźmy jednak jak wygląda zwracany przez nasz skrypt ciąg znaków w zależności od statusu naszego ICQ:
Offline (nie połączony):
HTTP/1.0 200 OK Content-type: image/gif GIF89a (ŽÔÓtR śóĄ# % áw` Ä…40 Ä„ ìtÄ„Wb¨Ã³Å„Å›çÄ

Online (połączony):
HTTP/1.0 200 OK Content-type: image/gif GIF89a ( ŽÔÓtR śóĄ# % á7@ Ä…40 Ä„ UìtÄ„"WB¨Ã³Å„Å›ç"

Istnieje jeszcze status Disabled (wyłączony???), jednak tutaj znajomość szczegółów nie jest nam potrzebna - za pewnik można przyjąć, że gdy aktualny status nie jest statusem Offline ani Online to jest to Disabled (co, w naszym przypadku, będzie równie dobrze mogło oznaczać, że nasz skrypt nie mógł połączyć się z serwerem ICQ).
A więc przed nami stoi kolejne zadanie: musimy rozpoznać, który ciąg znaków otrzymujemy. W PHP jest to dość proste - istnieje sporo funkcji, które można tutaj wykrozystać. My skorzystamy z eregi();
$online = eregi ("á7@", $wynik);

$offline = eregi ("áw`", $wynik);

Co robi ów kod? Funkcja eregi wyszukuje w podanym ciÄ…gu (tutaj $wynik - czyli odpowiedzi z serwera icq) podanego ciÄ…gu (tutaj "á7@" dla on a "áw`" dla offline) - jeÅ›li go znajdzie zwraca prawdÄ™ ("1"). Problemem nie bÄ™dzie wiÄ™c wyÅ›wietlenie odpowiedniego napisu/ obrazka w zależnoÅ›ci od tego, czy jesteÅ›my on czy offline:
if ($online==1)
{echo "online";}
elseif ($offline==1)
{echo "offline";}


if ($online==0&&$offline==0||!$online&&!$offline)
{echo "disabled";}


I co, już koniec? Tak :). Cały skrypt wygląda więc tak:
error_reporting(0);
/*wyłączamy wyświetlanie błędów*/
$fp = fsockopen ("wwp.icq.com", 80, &$errno, &$errstr, 30);
/*otwieramy połączenie z serwerem icq*/
if (!$fp) {
echo "disabled(2)";
break;
}
/*jeśli coś pójdzie nie tak wyświetlamy disabled i kończymy działanie skryptu*/
else {
fputs ($fp, "GET /scripts/online.dll?icq=XXXXXX&img=5 HTTP/1.0\n\n");
/* dostajemy się do właściwego skrypciora na serwerze icq*/
while (!feof($fp))
{

if (!$wynik = &fgets ($fp, 128))
{echo "disabled(1)";
break;
}
/* pobieramy ciąg znaków, jeśli coś jest nie tak wyświetlamy disabled izatrzymujemy skrypt, jeśli wszystko jest ok... */
else
{
$online = eregi ("á7@", $wynik);
$offline = eregi ("áw`", $wynik);
}
if ($online==1)
{echo "online";}
elseif ($offline==1)
{echo "offline";}
}
fclose ($fp);
/* sprawdzamy nasz status i wyświetlamy odpowiedni napis*/
}
if ($online==0&&$offline==0||!$online&&!$offline)
{echo "disabled";}
/* jeśli nie ma nas online ani offline wyświetlamy disabled*/
?>

Oczywiście, jest to wersja maxymalnie uproszczona - zamiast tekstów w stylu "online" możemy wyświetlać obrazek () lub cokolwiek innego. Jeśli zamierzamy intensywnie (tj. na wielu stronach) korzystać z tego skryptu, warto by było całość zdefiniować jako funkcję do której przekazujemy jeden parametr - nr. UIN. Ale z tym, mam nadzieję, już sobie poradzicie :).


Wyszukiwarka

Podobne podstrony:
garmin online settings
php 2
B 17 Flying Fortress II The Mighty 8th Poradnik Gry Online
Biblioteka PHP Wysyłanie pliku na serwer
k php
Blink2 Online Songs
Delphi i PHP
php 2
php 3
PHP i Oracle Tworzenie aplikacji webowych od przetwarzania danych po Ajaksa
instructions for php scripts
PHP i MySQL Dla kazdego
kurs php
www mediweb pl sex wyswietl vad php id=703

więcej podobnych podstron