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. <img SRC="http://wwp.icq.com/scripts/online.dll?icq=XXXXXX&img=5"> 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. <? //<img SRC="http://wwp.icq.com/scripts/online.dll?icq=XXXXXX&img=5"> ?> 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): <? //<img SRC="http://wwp.icq.com/scripts/online.dll?icq=205890&img=5"> 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 (<img src=\"obrazek.gif\">) 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 :).
kamil6966