Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Skrypt, sprawdzający status serwera
Akiro
post 21.11.2013, 20:42:11
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Witam, cały dzień się z tym męczę i mi nie wychodzi, a jestem kompletnie zielony jeśli chodzi o PHP. Mianowicie, próbuję na forum dodać skrypt, który sprawdzałby status serwera. Próbowałem już używać socketów, stosując to:
  1. <?php
  2. $ip = "ip";
  3. $port = "port";
  4. $sock = @fsockopen( $ip, $port, $num, $error, 60 );
  5.  
  6. if( !$sock ){
  7. echo( "Offline");
  8. }
  9.  
  10. if( $sock ){
  11. echo( "Online" );
  12. fclose($sock);
  13. }
  14. ?>

I skrypt w zasadzie działał, bo kiedy podałem IP i Port serwera, na którym stoi forum, to wyświetlało mi poprawnie. Natomiast, kiedy podałem IP i Port login serverów, to wyświetlało "Offline" i error: Connection timed out, pomimo tego, że serwer był włączony. Puściłem jeszcze pinga na adres tego serwera z konsoli Windowsa i gubiło wszystkie pakiety, więc doszedłem do wniosku, że serwer jest chroniony jakimś firewallem czy coś.

Wtedy, ktoś mnie pokierował, żeby zrobić skrypt, który zczytuje wartość dla "serverStatus" (bodajże: 0 - offline, 1 - online, 2 - busy) z tego pliku:
http://ll.leagueoflegends.com/pages/launcher/euw

Mój problem polega na tym, że nie wiem jak to zrobić. Czytałem trochę chociażby o file_get_contents(), ale kiedy napiszę coś w stylu:
  1. <?php
  2. $status = file_get_contents('http://ll.leagueoflegends.com/pages/launcher/euw');
  3. echo "$status";
  4. ?>

to zamiast wyświetlić mi zawartość tego pliku, to na forum pojawia się obrazek z CAPTCHą i komunikat, abym udowodnił, że nie jestem botem.

Nie wiem też jak później wywołać te "serverStatus", żeby potem napisać do tego warunek na status serwera.

Z góry dzięki za pomoc.wink.gif
Go to the top of the page
+Quote Post
Popek231
post 21.11.2013, 22:40:05
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


najpierw sprawdź czy plik istnieje, a potem za pomocą if wyświetl status ;)

może Ci sie uda za pomocą:
http://us3.php.net/file_get_contents#refse...ontents-seealso
Go to the top of the page
+Quote Post
Akiro
post 21.11.2013, 23:02:24
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze zrozumiałem; do sprawdzenia czy plik istnieje służy chyba file_exists i mógłbym napisać coś w stylu:
  1. <?php
  2. $plik = 'http://ll.leagueoflegends.com/pages/launcher/euw';
  3.  
  4. if (file_exists($plik)) {
  5. echo "Serwer online";
  6. } else {
  7. echo "Serwer offline";
  8. }
  9. ?>

ale przecież, to że plik istnieje nie znaczy, że serwer jest włączony ? Bardziej chodzi o zawartość pliku, fragment "serverStatus" - skrypt powinien zczytywać jaka jest jego wartość i na podstawie tego wyświetlać stosowną informację.
Go to the top of the page
+Quote Post
Popek231
post 21.11.2013, 23:34:53
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Nie znam się na serwerze gry lol, ale na serwerze gry minecraft jest plik, który powstaje po włączeniu serwera.
w tej grze powinien też taki być wink.gif
ale mogę się mylićtongue.gif

---------
hmm... możesz też wykorzystać skrypt, który sprawdza plik czy znajduje się w nim ciąg znaków
w tym przypadku "serverStatus":1 to status ONLINE, "serverStatus":0 OFFLINE wink.gif

-----------------
albo zastosuj:
  1. substr_count('this is PHP!', 'is'); // zwróci 2


dla Ciebie:

  1. if(substr_count($otwarty_i_odczytany_plik, '"serverStatus":1') >= 1){
  2. echo 'ONLINE! :)';
  3. } else {
  4. echo 'OFFLINE! :(';
  5. }


Ten post edytował Popek231 21.11.2013, 23:35:37


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 21.11.2013, 23:36:09
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


To jest chyba po prostu kod launchera lola, który można uruchomić niezależnie od tego, czy serwer jest online czy offline, ale właśnie w tym launcherze jest wyświetlany status login servera, więc zczytując dany fragment mógłbym napisać warunek i stworzyć taki prosty status serwerów.
Cytat
hmm... możesz też wykorzystać skrypt, który sprawdza plik czy znajduje się w nim ciąg znaków
w tym przypadku "serverStatus":1 to status ONLINE, "serverStatus":0 OFFLINE

Tylko właśnie nie potrafię dojść do tego jak to zrobić sad.gif

@edit
O dzięki, nie zobaczyłem edita, bo sam wtedy pisałem posta. Zaraz to wypróbuję.


@edit2
Nie działa, dostaję takie coś:
Kod
Fatal error: Can't use function return value in write context in /home/a2292042/public_html/index.php(400) : eval()'d code(24) : eval()'d code on line 3

to by była linijka dla if, w ogóle można użyć jednocześnie ' i " jedno po drugim ?

Ten post edytował Akiro 21.11.2013, 23:50:29
Go to the top of the page
+Quote Post
Popek231
post 22.11.2013, 00:07:04
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


tak, można użyć " po ', ponieważ wtedy php szuka zamknięcia czyli ', a nie " i nic nie robi sobie z tego, że " się tam znajduje smile.gif

możesz za pomocą JS odczytać zawartość tego pliku, dać w ukryte pole w form'ie, gdy kliknie się na stronie, żeby pokazało status, wyśle się kod tego pliku / strony i php sprawdzi wtedy status, gdyż chyba w AJAXie nie umiesz napisać, by automatycznie wtedy się to wyświetlało, na "żywo" podczas ładowania wink.gif
tyle ode mnie na dziś, branoc:)

pokaż co się tam dzieje,
tzn kod pokaż

Ten post edytował Popek231 22.11.2013, 00:07:58


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 22.11.2013, 00:15:57
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Dziwne, bo błąd "sam się naprawił" (po prostu jeszcze raz wkleiłem ten fragment kodu, który podałeś i dostosowałem do swojej zmiennej).
  1. $euw = file_get_contents('http://ll.leagueoflegends.com/pages/launcher/euw', 'r');
  2. if(substr_count($euw, '"serverStatus":1') >= 1){
  3. echo 'ONLINE! :)';
  4. } else {
  5. echo 'OFFLINE! :(';
  6. }

Tyle, że dla takiego warunku skrypt pokazuje "OFFLINE". :<

Próbowałem jeszcze, go przerobić na coś takiego:
  1. $euw = file_get_contents('http://ll.leagueoflegends.com/pages/launcher/euw', 'r');
  2. $euw_status = substr_count($euw, '"serverStatus":1');
  3. if($euw_status=1)
  4. {
  5. echo "EUW: Online";
  6. }
  7. else if($euw_status=0)
  8. {
  9. echo "EUW: Offline";
  10. }

I pokazało mi, że jest Online, ale to samo wyświetlało dla "serverStatus":0 biggrin.gif Chyba, że tak powinno być, bo ja jednak jestem zielony i nie wiem czy dobrze rozumiem sposób jej działania tongue.gif

Ten post edytował Akiro 22.11.2013, 00:17:17
Go to the top of the page
+Quote Post
vermis
post 22.11.2013, 00:18:28
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Operator porównania to '=='
  1. if($euw_status==1)


--------------------
Go to the top of the page
+Quote Post
Popek231
post 22.11.2013, 00:20:29
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


co wyskakuje, gdy wpiszesz
  1. echo $euw;


kod, który się znajduje na stronie?


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 22.11.2013, 00:29:07
Post #10





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Cytat(vermis @ 22.11.2013, 00:18:28 ) *
Operator porównania to '=='
  1. if($euw_status==1)

Aj, poprawiłem i teraz znowu wyświetla "Offline". Domyślam się dlaczego, bo:
Cytat(Popek231 @ 22.11.2013, 00:20:29 ) *
co wyskakuje, gdy wpiszesz
  1. echo $euw;


kod, który się znajduje na stronie?

skutkuje pojawieniem się czegoś takiego na forum:
http://i.imgur.com/uuf5iu4.jpg

Więc skrypt nawet nie może przeczytać tamtej wartości. Jest na to jakiś sposób?
Go to the top of the page
+Quote Post
Popek231
post 22.11.2013, 00:51:25
Post #11





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


myślę, że JS najlepszy wink.gif
ale jest jeszcze AJAX.. biggrin.gif


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 22.11.2013, 01:02:42
Post #12





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Czyli nie da się tego w żaden sposób obejść stosując kod php? Skoro tam pojawił się komunikat o Cookies, to może trzeba je jakoś odblokować dla tego skryptu? JS i Ajaxa nie ogarniam kompletnie.
Go to the top of the page
+Quote Post
Popek231
post 22.11.2013, 01:07:37
Post #13





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


sam JS wystarczy;)
przesyłasz przez JS formularzem zawartość strony z lola, potem php odczytuje to jako wartość; nie captche i śmiga;)
przynajmniej tak powinno być według mnie:D


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 22.11.2013, 01:11:58
Post #14





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


A mógłbyś mnie jakoś pokierować jak przesłać zawartość strony przez taki formularz, a potem to odczytać przez php? Patrzę na te manuale w internecie, ale prawie nic mi to nie mówi :/
Go to the top of the page
+Quote Post
Popek231
post 22.11.2013, 01:20:20
Post #15





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


teraz testuje wszyskto, ale nie mogę jednak tego zrobić...
ale wiem jak wyświetlić tą stronę:
  1. <object type="text/html" data="http://ll.leagueoflegends.com/pages/launcher/euw"></object>

jak wymyślisz jak to wyciągnąć, jesteś w domku;)


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
-Gość-
post 22.11.2013, 01:57:36
Post #16





Goście







użyj tego, zwróć uwagę na useragenta (prawdopodobnie po tym rozpoznają, że jesteś botem)
http://www.jonasjohn.de/snippets/php/curl-example.htm

Jak nadal rozpoznaje Cię jako bota, podmień USERAGENT na jakiś nowocześniejszy (listę useragentow przegladarek znajdziesz gdzieś w necie).
Go to the top of the page
+Quote Post
Akiro
post 22.11.2013, 17:47:50
Post #17





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Teraz nie rozpoznaje mnie jako bota, tylko po prostu nic nie wyświetla. Podmieniłem te useragenty na swoje własne.
@edit
Wcześniej źle wywołałem funkcję. Teraz pomimo tego, że ustawiałem różne useragenty cały czas wywala to CAPTCHA. Jakieś pomysły?

Ten post edytował Akiro 22.11.2013, 18:04:58
Go to the top of the page
+Quote Post
Popek231
post 23.11.2013, 13:17:30
Post #18





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


próbuję cały dzień coś z tym wykombinować, bo sam jestem ciekawy jak to zrobić..
podaj IP serwera, spróbuję sprawdzić wszystkie możliwe opcje sprawdzenia statusu:D

Ten post edytował Popek231 23.11.2013, 14:51:13


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Akiro
post 23.11.2013, 14:50:48
Post #19





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 21.11.2013

Ostrzeżenie: (0%)
-----


Próbowałem tymi curlami, tak jak ktoś podał wyżej i cały czas wyświetlało CAPTCHA i żebym włączył ciasteczka, dlatego do tego skryptu z linku dodałem jeszcze zapisywanie ciasteczek do pliku.
  1. <?php
  2. $url = 'http://ll.leagueoflegends.com/pages/launcher/euw';
  3. function curl_download($url){
  4. $ch = curl_init();
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080214 Firefox/2.0.0.12");
  7. curl_setopt($ch, CURLOPT_HEADER, 0);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  9. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  10. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  12.  
  13. $output = curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. return $output;
  17. }
  18. echo curl_download($url);
  19. ?>

Cały czas nie pozwala czytać tej strony, ale w cookie.txt mam coś takiego (nie wiem co to znaczy :X):
Kod
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.leagueoflegends.com    TRUE    /    FALSE    1577145000    __cfduid    d67bc2ab035f6fa45669618cc7e50b0891385209535263



Co do IP - przykładowo: prod.eu.lol.riotgames.com (jeśli chcesz dokładne IP, to puść pinga na ten adres, ale pakietów i tak nie odbiera :/), port:2099. I to jest TCP jak coś.

Ten post edytował Akiro 23.11.2013, 14:51:34
Go to the top of the page
+Quote Post
Popek231
post 23.11.2013, 15:25:41
Post #20





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


hmm.. aktualnie nie sprawdzę tego IP na stronie, bo zlagowana jest cała przez ugu.pl :/

czytałem przedtem, że sock nie działa na darmowych hostingach, ponieważ go blokują..
jeśli taki masz, chyba nie masz szans na to, że działaś przez sock będzie;)


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 03:50