EKG2 i php ( boot )
Katalog znalezionych hasełArchiwum
- Moje największe skarby i opowieści prosto z mojego
- Zliczanie ilosci uzytkownikow na stronie i szpiegowanie[php]
- Funkcja rejestracji i logowania [php]
- Ace Ventura-"Re:Boot"
- [php]Poczatki php - jak cos zapisac przy pomocy echo
- 1 finalista Bacardi B-Live 2008/2009
- ALAN 8001S AM/FM SSB 4/4/10W
- Protokoły z posiedzeń Zarządu Powiatu
- Uchwały Rady Powiatu
- informacje z działalności
- Protokoły z Sesji Rady Powiatu
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- demonter.keep.pl
Moje największe skarby i opowieści prosto z mojego
czesc z tych uzytkownikow na pewno widziala w zyciu cos w rodzaju
autorespondera(boot). Czyli taki automat, ktory odpowiada na zadawane
pytania bez udzialu czlowieka.
Przyklad : gg:3217426 - po polaczeniu wpiszcie 'pomoc'.
No dobra, a jak jest to zrobione ?
W sumie to zadna sprawa bo najczesciej i najwygodniej mozna to zrobic
na linuxowym odpowiedniku gg zwanym ekg.
Opisany sposob 'jak to zrobic...' opiera sie wlasnie o linux, serwer www i php oraz ekg2.
Ostatnio pojawila sie nowsza wersja ekg nazwana jako ekg2, ktora jest
wzbogacona o pare opcji i mozliwosci konfiguracyjne.
Poniewaz my bedziemy sobie cos takiego robic
potrzebny nam bedzie do tego serwer zainstalowany na linux, i samo ekg2.
Sciagamy wiec paczke ekg2, rozpakowywujemy do katalogu w ktorym juz zostanie
bedac w tym katalogu wydajemy kolejne polecenia shell'a czyli instalujemy :
./configure
make
make install
Mozna juz uruchomic ekg2 .
Piszemy wiec 'ekg2' i juz.
Poniewaz jak kazde gg zeby sie polaczyc z serwerem musi byc odpowiednio
skonfigurowane. Podobnie jest w ekg2 ktore przypomina raczej taka nakladke na
system, w ktorym podaje sie odpowiednie polecenia w linii komend.
Tak wiec piszemy :
session -a gg:xxxxx
session password nasze_has?o
- gdzie xxxxx to numer dla ekg2
i juz mozna sie polaczyc :
connect
a zeby nasze ekg2 nie zapominalo wprowadzonych ustawien wykonujemy tez :
save .
Mozna juz sprawdzic ekg2 czy dziala poprawnie wpisujac jakas wiadomosc w naszym
prywatnym gg pod numer ekg2. W oknie o kazdej czynnosci czy zdarzeniu, o ile tego nie
wylaczymy, jestesmy informowani stosownym komunikatem.
Aby przejsc do okienka z nadchodzaca wiadomoscia wystarczy nacisnac alt + cyferke okna.
Poniewaz my chcemy wysylac wiadomosci niemal automatycznie poprostu robiac
to ze skryptu php to po to nam wlasnie jest potrzebny serwer z obsluga php.
Ten jezyk nadaje sie do tego celu najlepiej i jest jednoczesnie znany duzej ilosci
programistow. Czesto do tego celu uzywa sie tez python'a, ale i ja go nie znam
wiec uparlem sie na wykorzystanie php.
Wszystkie pliki , ktore beda obrabiane w skryptach bedziemy umieszczac w domowym
folderze serwera lub poprostu w jakims glebszym do tego celu przeznaczonym
folderze wiec wszystkie sciezki beda zapisywane w postaci pelnej .
W ten sposob nie bedziemy mieli problemow z odczytem lub zapisem jakiegos pliku
bezposrednio z php.
Aby sterowac z pod php naszym ekg2 nalezy utworzyc specjalny do tego kanal :
/plugin +rc
/set rc:remote_control pipe:/sciezka/ekgpipe.ekg2
/save
Przy czym sciezka to jest pelna sciezka do miejsca gdzie znajduje sie nasz serwer np :
/home/httpd/html/
tak wiec caly zapis bedzie wygladac tak :
/plugin +rc
/set rc:remote_control pipe:/home/httpd/html/ekgpipe.ekg2
/save
Wpisujac kolejno do naszego ekg2 te polecenia zaladujemy odpowiedni
plugin, i ustawimy odpowiedni kanal w katalogu domowym serwera.
Na koniec poprzez save zapisujemy ustawienia.
Po wykonaniu save we wskazanej lokacji powinien sie nam utworzyc odpowiedni plik
wymiany miedzy shell, a ekg2. Przez ten plik nasz system i php bedzie sie
komunikowac , a raczej wydawac bezposrednie polecenia do ekg2.
Nie mozna tego pliku zapisac bezposrednio tylko przy pomocy specjalnych
polecen w linux.
Zeby to sprawdzic wystarczy napisac w shell systemu komende :
echo /msg gg:xxxxx tersc wiadomosci >> /sciezka/ekgpipe.ekg2
- gdzie xxxxx to numer naszego prywatnego gg.
- sciezka to pelna sciezka do pliku
Zeby wykonac to samo bezposrednio z pod php :
<?
$numer = 'xxxxx';
$wiadomosc = 'tresc wiadomosci';
shell_exec("echo /msg gg:" .$numer ." " .$wiadomosc ." >> /sciezka/ekgpipe.ekg2");
?>
Jesli jest cos nie tak i nie chce sie wykonac to trzeba nadac odpowiednie
prawa wykonywalnosci dla ekg2 i skryptu php ustawiajac odpowiednie wartosci chmod
i/lub, jesli bedzie to wymagane, poprzez dodanie odpowiedniego wpisu do sudo.
Czyli po wpisaniu 'visudo' nalezy dodac wpis na koncu w postaci :
nobody ALL=NOPASSWD:/home/httpd/html/ekg_autores_2.php
Dobrze by bylo reagowac tez na napisane wiadomosci pod numer ekg2.
Czyli jesli napiszemy z jakiegos numeru pod numer ekg2 jakas wiadomosc
to takie zdarzenie powinno wywolac odpowiednia reakcje w ekg2, a najlepiej jesli
to bedzie jakis dowolny skrypt.
Na szczescie tworcy ekg2 dali nam taka mozliwosc.
Po wpisaniu komendy w ekg2 :
on -a protocol-message 1 %1!=gg:xxxxx exec -b %1 /sciezka/ekg.txt
- gdzie xxxxx to numer ekg2
- sciezka to pelna sciezka np w postaci '/home/httpd/html/ do skryptu
dodamy do ekg2 zdarzenie, ktore po nadejsciu wiadomosci wykona systemowy
skrypt ekg.txt :
Czyli za kazdym razem kiedy ekg2 otrzyma wiadomosc to wywola tez skrypt.
Co w nim zrobimy bedzie zalezne wylacznie od nas. Moze to byc np wywolanie skryptu php:
#!/bin/bash
php -f /sciezka/ekg_autores.php
Innym sie to jakos udaje, ale mnie sie nie udalo wykonac bezposrednio z ekg2 skrypt
php wiec wpadlem na pomysl, ze wlasnie ekg2 wykonuje sktypt systemowy wyzej, ktory
wykonuje/wywoluje skrypt w php.
Tak wiec nalezy pamietac, ze od tad nasz skypt w php bedzie zapisany pod sciezka
i nazwa skryptu : 'sciezka/ekg_autores.php' .
We wspomniany sposob mozna wyslac dowolna ilosc wiadomosci w jednym skrypcie.
Wlasciwie to co sie stanie zalezy tylko od nas odpowiednio konstruujac skrypt php.
No ok, ale jak narazie umiemy jedynie zareagowac na zdarzenie przyjscia
wiadomosci i wywolac w ten sposob skrypt php. Umiemy tez wyslac polecenie
i przy jego pomocy np dowolna wiadomosc, ale dobrze by bylo jeszcze wiedziec
z pod jakiego numeru przyszla wiadomosc i jaka to jest tresc wiadomosci.
Do tego celu posluzymy sie historia rozmow w ekg2, ktora umiescimy
w folderze serwera po to zeby miec do tego pliku dostep poprzez php.
Tak wiec wydajemy do ekg2 kolejne polecenia :
plugin +logs
set logs:log 1
set logs:path /sciezka/history.txt
i na koniec save .
Po wykonaniu save powinien pokazac sie dodatkowy plik w wskazanej lokacji o
nazwie history.txt, a za kazdym razem kiedy cos napiszemy do innego numeru gg
z pod ekg2 jakas wiadomosc, albo przyjdzie pod numer ekg2 jakas wiadomosc to ekg2
zapisze o tym informacje w pliku log (history.txt) .
Sama konstrukcja logu wedlug ustawien jakie wprowadzilismy to :
msgsend,gg:xxxxxx,gg:xxxxxx,1252953761,"tresc wiadomosci"
- gdzie xxxxxx to numer wysylajacego wiadomosc
- zamiast msgsend moze byc receive. Wtedy kierunek jest w druga strone
No i teraz to juz mamy wlasciwie z gorki poniewaz po wyslaniu jakiejs wiadomosci
do ekg2 np z naszego prywatnego numeru zostanie wykonany skrypt w php, a to
co juz dalej z tym zrobimy to juz nasza sprawa. Mozemy np wczytac plik historii rozmow
i odczytac z niego wszystko co nas interesuje oraz na koniec zareagowac lub nie
na te wiadomosc, numer lub cokolwiek innego.
Przyklad :
<?php
# otwarcie pliku historii z dysku
$nazwa_pliku = '/sciezka/history.txt';
$fp = fopen("$nazwa_pliku", "r");
$dane = fread($fp, filesize($nazwa_pliku));
fclose($fp);
# utworzenie tablicy z odczytanej zawartosci z kolejnymi wpisami, policzenie
# ostatniej linijki i utworzenie tablicy z kolejnymi wpisami
$tab = explode("\n", $dane);
$il = count($tab);
$ost_wiad = $tab[$il - 2];
$sklad = explode(",", $ost_wiad);
# zainicjowanie zmiennych oraz usuniecie z numeru gg:xxxxxx frazy gg:
$byla = '';
$sklad[1] = preg_replace("[gg:]", "", $sklad[1]);
if ($sklad[5] == '!czas' AND $byla == '') {
$wiadomosc = "Aktualna data i czas :" ."\r";
$wiadomosc .= date("d.m.Y", $sklad[3]) ." godz " .date("H:i:s", $sklad[3]) ."\r";
$byla = '1';
}
if ($byla == '') {
$temp = $sklad[5];
$temp = preg_replace("[kurw]", "", $temp);
$temp = preg_replace("[huj]", "", $temp);
$temp = preg_replace("[pipa]", "", $temp);
$temp = preg_replace("[zaje]", "", $temp);
$temp = preg_replace("[przeje]", "", $temp);
$temp = preg_replace("[pizd]", "", $temp);
$temp = preg_replace("[kuta]", "", $temp);
$temp = preg_replace("[jeba]", "", $temp);
$wiad_dodatk = '';
if ($temp != $sklad[5]) {
$wiad_dodatk = "\r" ."Akurat to Ci przyszlo do glowy ? ... :\>";
}
$wiadomosc = "Witaj. To jest test miniautorespondera" ."\r";
$wiadomosc .= "Wyslales wiadomosc z numeru " .$sklad[1] ."\r";
$wiadomosc .= "Dnia " .date("d.m.Y", $sklad[3]) ." o godz " .date("H:i", $sklad[3]) ."\r";
$wiadomosc .= "Tresc wiadomosci :" ."\r" ."'" .$sklad[5] ."'";
$wiadomosc .= $wiad_dodatk;
}
# na koniec wyslanie wiadomosci ustalonej w skrypcie do respondera
shell_exec("echo /msg gg:" .$sklad[1] ." " .$wiadomosc ." >> /sciezka/ekgpipe.ekg2");
?>
po wyslaniu dowolnej wiadomosci do ekg2 powinna sie pojawic w odpowiedzi tresc
wiadomosci :
Witaj. To jest test miniautorespondera
Wyslales wiadomosc z numeru xxxxx
Dnia 22.08.2009 o godz 04:16
Tresc wiadomosci :
cos
a po wpisaniu do wiadomosci !czas
powinna sie pojawic wiadomosc w odpowiedzi :
Aktualna data i czas :
22.08.2009 godz 04:17:31
Mozna to sobie sprawdzic pod numerem : gg:11442978 .
Tak wiec mamy juz wszystko co potrzeba zeby zautomatyzowac proces wysylania
wiadomosci jak i rownierz reakcji na dowolne zdarzenie w ekg2 jesli przyjdzie do
niego wiadomosc z zewnatrz.
Na koniec przydatna informacja. Zeby nam ekg2 'nie zdechlo' podczas
wyjscia z shell radze sie zainteresowac programem 'screen'.
Wystarczy po zainstalowaniu screen'a napisac
screen ekg2
i mozna wyjsc z shell bez obeawy, ze nam sie ekg2 nie rozlaczy.
Można także od razu uruchomić zminimalizowanego screena podczas
uruchamiania sie systemu :
screen -S ekg2 -d -m ekg2 --user bot
Po powtórnym zalogowaniu mozemy zlistowac sesje :
screen -ls
podlaczyc sie do nazwanej sesji
screen -x ekg2
Widzialem nawet jak ktos napisal czat oparty o ekg2, serwer www i gg :)
Mozna i tak, ale oczywiscie inwencja stoi po stronie piszacego.
Mnie nawet udalo sie sterowac czterema diodami zapalajac je lub gaszac
bezposrednio z gg wpisujac odpowiednie polecenie :
Pod numer gg:11442978 wystarczy wpisac :
!dioda_xxxx
- gdzie x to cyfra 1 lub 0. 0 gasi diode, 1 zapala diode.
Przyklady : !dioda_0010 , !dioda_0000 , !dioda_1111 , ...
Efekt bedzie widoczny pod www.bluelan.eu/cam/ .
Innym pomyslem na wykorzystanie ekg2 to udostepnianie ekg2 do rozsylania
wiadomosci z roznych stron. Uzytkownicy, ktorzy chca miec taka usluge
na swojej stronie zglaszaja mi taka potrzebe, a ja im daje 4 linijki kodu, ktory
laczy sie z moim serwerkiem i wykonuje reszte wysylajac ustawiona tresc u
uzytkownika pod wskazany numer.
Np tak :
$ekg_nr = '32342344'; // przykladowy numer
$ekg_wiad = "Zablokowany - login=$login_ban , ip=$ip_ban , probuje napisac wiadomosc o tresci=" .$_POST['messagesb'] ." , w SB";
$haslo = 'asdakjklasdjkkahjjs'; // przykladowe haslo wykorzystania skryptu
$ekg_wiad = preg_replace("[ ]", "%20" ,$ekg_wiad);
$lll = file_get_content("http://www.bluelan.pl/_ekg/ekg_rha.php?ekg_nr=$ekg_nr"
."&ekg_wiad=$ekg_wiad" ."&haslo=$haslo");
Ja na swoim serwerze jedynie w odpowiednim skrypcie przy pomocy GET
odczytuje tylko zawarte informacje i reaguje na to jesli haslo sie zgadza.
Czyli pozostaje wyslanie wiadomosci pod wskazany numer gg i ewentualnie zapisuje
to w logach jako zapis w bazie danych.
Zabezpieczenia ?
Poki sami korzystamy ze skryptu nie ma sie o co martwic, ale jesli rzeczywiscie
musimy dac komus korzystajacemu z naszego serwera do skryptu obslugujacego
ekg2 to mozna to zrobic na conajmniej kilka sposobow. Np includowac
plik z parametrem hasla strony, ktora ma dostep do skryptu.
Tutaj juz kazdy musi sobie sam to rozwiazac.