Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobieranie informacji o serwerze CS (Counter Strike)
Forum PHP.pl > Forum > Przedszkole
Ronnie8
Witam smile.gif

Zacznę może od opisania skryptu który mam w planach stworzyć wink.gif

1.Skrypt ma współpracować z bazą danych w której będzie 9 pół (id, ip, nazwa, graczy, mapa, active, inne1, inne2, inne3) pola inne to na pola które będą zawierały informacje nie związane z samym skryptem np "liczba" która będzie decydowała o kolejności wyświetlania rekordów na liście smile.gif
Oczywiście etap pierwszy to utworzenie bazy danych i jej zapełnienie a to nie stanowi problemu smile.gif
2. Skrypt php który będzię uruchamiał się dajmy na to co 15 minut i będzie aktualizował informacje smile.gif

samo auto uruchamianie skryptu i aktualizowanie informacji nie jest problemem jednak nie wiem jak połączyć się z danym serwerem, odczytać interesujące mnie informacje (nazwe, ilość graczy, mape i czy serwer jest aktywny)?
W internecie znalazłem multum rozbudowanych skryptów które rozwiązywały powyższe problemy z tym że były oparte na plikach i nie przystosowane do pracy z bazami danych a raczej ja nie umiałbym ich odpowiednio zmodyfikkować tongue.gif
Dlatego pisze do Was z proźbą o wytłumaczenie mi jak nawiązać połączenie z danym serwerem, odebrać porządane informacje?
będę wdzięczny za poradniki, linki i tym podobne smile.gif


Z góry dziękuje za jakąkolwiek pomoc smile.gif
vifus
Szukaj, szukaj, szukaj ;>

http://forum.php.pl/index.php?showtopic=23051
Ronnie8
Nie wiem czemu ale przeoczyłem ten temat tongue.gif tak czy inaczej dziękuje za pomoc ponieważ podejrzewam że temat rozwiąże wszystkie moje problemy smile.gif

Niestety nie wszystko chyba działa tak jak należy:
  1. <?php
  2.  
  3. /**
  4.   * pobiera informacje z serwera i zwraca tablice z tymi danymi
  5.   *
  6.   * @param string $intServerIP Adres IP serwera
  7.   * @param integer $intServerPort Port serwera
  8.   * @return array
  9.   */
  10.  
  11. function RetriveInfo ( $strServerIP = '127.0.0.1', $intServerPort = 27015 )
  12. {
  13. $connection = fsockopen( "udp://" . $strServerIP, $intServerPort );
  14. fwrite( $connection, sprintf( '%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, "infostring", 0x00 ) );
  15. fread( $connection, 24 );
  16. $status = socket_get_status( $connection );
  17. if ( $status["unread_bytes"] != 0 )
  18. {
  19. $return = "";
  20. while ( $status["unread_bytes"] != 0 )
  21. {
  22. $return .= fread( $connection, 1 );
  23. $status = socket_get_status( $connection );
  24. }
  25.  
  26. $return = explode( '', $return );
  27.  
  28. $arr = array();
  29. $arr['ip'] = $intServerIP;
  30. $arr['port'] = $intServerPort;
  31. $arr['hostname'] = $return[19];
  32. $arr['game'] = $return[17];
  33. $arr['players'] = $return[5];
  34. $arr['maxplayers'] = $return[11];
  35. $arr['system'] = ( $return[25] == "w" ) ? "Windows" : "Linux";
  36. $arr['game_dir'] = $return[15];
  37. $arr['map'] = $return[21];
  38. $arr['password'] = ( $return[25] == "0" ) ? "false" : "true";
  39. $arr['secure'] = $return[29];
  40. return $arr;
  41. }
  42. else
  43. {
  44. // blad?
  45. return $arr;
  46. }
  47. }
  48. ?>
  49.  
  50.  
  51. <?php
  52. $arr = RetriveInfo("193.33.176.238", "27015"); // gdzie te parametry to IP oraz port
  53. echo "IP: " . $arr['ip'];
  54. echo "<BR>";
  55. echo "Port: " . $arr['port'];
  56. echo "<BR>";
  57. echo "Nazwa servera: " . $arr['hostname'];
  58. echo "<BR>";
  59. echo "Gra: " . $arr['game'];
  60. echo "<BR>";
  61. echo "Ilosc graczy: " . $arr['players'];
  62. echo "<BR>";
  63. echo "Max graczy: " . $arr['maxplayers'];
  64. echo "<BR>";
  65. echo "System: " . $arr['system'];
  66. echo "<BR>";
  67. echo "Cos tam: " . $arr['game_dir'];
  68. echo "<BR>";
  69. echo "Mapa: " . $arr['players'];
  70. echo "<BR>";
  71. echo "Haslo: " . $arr['password'];
  72. echo "<BR>";
  73. echo "VAC: " . $arr[secure];
  74. echo "<BR>";
  75. ?>


Powyższy kod co prawda nie zwraca żadnego błędu jednak od 10minut skrypt ten wykonuje się i niestety nic to nie daje cały czas pracuje:P

Dlatego spróbowałem z tym kodem:
  1. <?php
  2.  
  3. /**
  4.   * pobiera informacje z serwera i zwraca tablice z tymi danymi
  5.   *
  6.   * @param string $intServerIP Adres IP serwera
  7.   * @param integer $intServerPort Port serwera
  8.   * @return array
  9.   */
  10. function RetriveInfo ( $strServerIP = '127.0.0.1', $intServerPort = 27015 )
  11. {
  12. $connection = fsockopen( "udp://" . $strServerIP, $intServerPort );
  13. fwrite( $connection, sprintf( '%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, "infostring", 0x00 ) );
  14. fread( $connection, 24 );
  15. $status = socket_get_status( $connection );
  16. if ( $status["unread_bytes"] != 0 )
  17. {
  18. $return = "";
  19. while ( $status["unread_bytes"] != 0 )
  20. {
  21. $return .= fread( $connection, 1 );
  22. $status = socket_get_status( $connection );
  23. }
  24.  
  25. $return = explode( '', $return );
  26.  
  27. $arr = array();
  28. $arr['ip'] = $intServerIP;
  29. $arr['port'] = $intServerPort;
  30. $arr['hostname'] = $return[19];
  31. $arr['game'] = $return[17];
  32. $arr['players'] = $return[5];
  33. $arr['maxplayers'] = $return[11];
  34. $arr['game_dir'] = $return[15];
  35. $arr['map'] = $return[21];
  36. $arr['secure'] = $return[29];
  37. return $arr;
  38. echo 'działa';
  39. }
  40. else
  41. {
  42. // blad?
  43. return $arr;
  44. }
  45. }
  46.  
  47. print_r( RetriveInfo( '193.33.176.238', 27015 ) );
  48. ?>


Jednak tak jak i w pierwszym przypadku skrypt wykonuje się już kilka minut i nic z tego nie wynika tongue.gif
Dodam że skrypty wrzuciłem na mój hosting w home.pl (bussines starter)

Czy macie pomysł co jest przyczyną tak długiego wykonywania się skryptu?

Macie jakieś pomysły czemu tak się dzieje? wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.