Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stop po x sekundach
Forum PHP.pl > Forum > PHP
mihau_koval
Witam. Mam kod:
  1. <?php
  2. $ip = "jakies ip";
  3. $port = "port";
  4.  
  5. // Nad tym IP i PORT serwera
  6.  
  7. $fp = fsockopen('udp://' . $ip, $port, $errno, $errstr,0.0);
  8. if (!$fp)
  9. {
  10. echo "Socket Error: $errno - $errstr";
  11. }
  12. else
  13. {
  14. $packet = 'SAMP';
  15. $packet .= chr(strtok($ip, '.'));
  16. $packet .= chr(strtok('.'));
  17. $packet .= chr(strtok('.'));
  18. $packet .= chr(strtok('.'));
  19. $packet .= chr($port & 0xFF);
  20. $packet .= chr($port >> 8 & 0xFF);
  21.  
  22. fwrite($fp, $packet.'i');
  23. fread($fp, 11);
  24. $is_passworded = ord(fread($fp, 1));
  25. $plr_count = ord(fread($fp, 2));
  26. $max_plrs = ord(fread($fp, 2));
  27.  
  28. $strlen    = ord(fread($fp, 4));
  29. $hostname   = fread($fp, $strlen);
  30.  
  31. $strlen    = ord(fread($fp, 4));
  32. $gamemode   = fread($fp, $strlen);
  33.  
  34. $strlen    = ord(fread($fp, 4));
  35. $mapname    = fread($fp, $strlen);
  36.  
  37.  
  38.  
  39.  
  40. $wyswietl = "$hostname<br>";
  41. $wyswietl .= "IP: $ip:$port<br>";
  42. $wyswietl .= "Mapa: ".$gamemode."<br>";
  43. $wyswietl .= "Gra: ".$mapname."<br>";
  44. if ($is_passworded)
  45. {
  46. $wyswietl .= "Hasło: tak<br>";
  47. }
  48. else
  49. {
  50. $wyswietl .= "Hasło: nie<br>";
  51. }
  52.  
  53. $wyswietl .= "Gracze: ".$plr_count."/".$max_plrs."<br>";
  54.  
  55. fclose($fp);
  56. }
  57. ?>

Teraz chcę zrobić tak, że gdy skrypt nie dostanie odpowiedzi po X sekundach, wyświetla komunikat, że serwer jest offline
erix
No to jak pakiet będziesz miał pusty, to chyba oczywiste, że nic nie ma?

A timeout ustawiasz w bodajże piątym parametrze fsockopen" title="Zobacz w manualu PHP" target="_manual.
mihau_koval
No zrobiłem tak:
  1. <?php
  2. $ip='91.203.132.162';
  3. $port='7799';
  4.  
  5. $fp = fsockopen('udp://' . $ip, $port, $errno, $errstr,5);
  6. if (!$fp)
  7. {
  8. $wyswietl = "Serwer jest offline! $errno - $errstr";
  9. }
  10. else
  11. {
  12. $packet = 'SAMP';
  13. $packet .= chr(strtok($ip, '.'));
  14. $packet .= chr(strtok('.'));
  15. $packet .= chr(strtok('.'));
  16. $packet .= chr(strtok('.'));
  17. $packet .= chr($port & 0xFF);
  18. $packet .= chr($port >> 8 & 0xFF);
  19.  
  20. fwrite($fp, $packet.'i');
  21. fread($fp, 11);
  22. $is_passworded = ord(fread($fp, 1));
  23. $plr_count = ord(fread($fp, 2));
  24. $max_plrs = ord(fread($fp, 2));
  25.  
  26. $strlen    = ord(fread($fp, 4));
  27. $hostname   = fread($fp, $strlen);
  28.  
  29. $strlen    = ord(fread($fp, 4));
  30. $gamemode   = fread($fp, $strlen);
  31.  
  32. $strlen    = ord(fread($fp, 4));
  33. $mapname    = fread($fp, $strlen);
  34.  
  35.  
  36.  
  37.  
  38. $wyswietl = "$hostname<br>";
  39. $wyswietl .= "IP: $ip:$port<br>";
  40. $wyswietl .= "Mapa: ".$gamemode."<br>";
  41. $wyswietl .= "Gra: ".$mapname."<br>";
  42. if ($is_passworded)
  43. {
  44. $wyswietl .= "Hasło: tak<br>";
  45. }
  46. else
  47. {
  48. $wyswietl .= "Hasło: nie<br>";
  49. }
  50.  
  51. $wyswietl .= "Gracze: ".$plr_count."/".$max_plrs."<br>";
  52.  
  53. fclose($fp);
  54. }
  55. ?>

I dalej nie pokazuje się że serwer jest offline, a php jakby się "zawiesza"
erix
Powiedziałem - sprawdzasz, czy pakiet jest pusty, a nie połączenie.

Możesz jeszcze się pobawić ustawieniami stream_set_blocking" title="Zobacz w manualu PHP" target="_manual.
mihau_koval
Może mógłbym prosić o troszkę więcej wskazówek, bo w php nie jestem pr0, a kod nie jest mój
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.