Witam!
Posiadam taki kod:
  1.  
  2. <?php
  3.  
  4. function ping($host,$port=80,$timeout=4)
  5. {
  6. $fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
  7. if ( ! $fsock )
  8. {
  9. return FALSE;
  10. }
  11. else
  12. {
  13. return TRUE;
  14. }
  15. }
  16. $ip = 'ip';
  17. $baza = 'baza';
  18. $login = 'login';
  19. $haslo = 'haslo';
  20.  
  21. if ( !mysql_connect($ip, $login, $haslo) ) {
  22. echo 'Nie moge polaczyc sie z baza danych';
  23. exit (0);
  24. }
  25. if ( !mysql_select_db($baza) ) {
  26. echo 'Blad otwarcia bazy danych';
  27. exit (0);
  28. }
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. $zapytanie = "SELECT * FROM alarmy";
  37. $wynik = mysql_query($zapytanie);
  38. while ( $row = mysql_fetch_row($wynik) ) {
  39. $host1 = $row[1];
  40. $up1 = ping($host1);
  41. $ison = $row[3];
  42. $nazwa = $row[2];
  43. $status = $row[4];
  44.  
  45. if( $ison == 1 ) {
  46. if( $up1 ) {
  47. echo "<font color='green'><B>Urządzenie <u>$nazwa</u> pracuje poprawnie</font><br>"; //Działa
  48. $update = "UPDATE alarmy SET status = '1' WHERE nazwa = '$nazwa'";
  49. @mysql_query($update);
  50. }
  51. else {
  52. sleep(40);
  53. if ( $up1 ) {
  54. echo "<font color='green'><B>Urządzenie <u>$nazwa</u> pracuje poprawnie</font><br>"; //Działa
  55. $update = "UPDATE alarmy SET status = '1' WHERE nazwa = '$nazwa'";
  56. @mysql_query($update);
  57. }
  58. else {
  59. echo "<font color='red'><B>Brak pracy urządzenia <u>$nazwa </u></font><br>"; //Nie działa!!
  60. $update = "UPDATE alarmy SET status = '0' WHERE nazwa = '$nazwa'";
  61. @mysql_query($update);
  62. }
  63. }}
  64.  
  65. else { echo "<font color='orange'><B>Urządzenie <u>$nazwa</u> wyłączone</font><br>";
  66. $update = "UPDATE alarmy SET status = '1' WHERE nazwa = '$nazwa'";
  67. @mysql_query($update);
  68.  
  69. } //Wyłączone
  70. }
  71. $zapytanie = "SELECT * FROM alarmy";
  72. $wynik = mysql_query($zapytanie);
  73. while ( $row = mysql_fetch_row($wynik) ) {
  74. $host1 = $row[1];
  75. $up1 = ping($host1);
  76. $ison = $row[3];
  77. $nazwa = $row[2];
  78. $status = $row[4];
  79.  
  80.  
  81. if ($status == 0){
  82. $x = "Urzadzenie $nazwa nie pracuje!";
  83. $x = urlencode($x);
  84. echo file_get_contents("http://serwer.pl/mail.php?maila=a@serwer.pl&wiadomosc=$x");
  85. echo "<br>";
  86. }
  87. }
  88.  
  89.  
  90. ?>
  91.  
  92.  


Posiadam kilka urządzeń, do których są podpięte access pointy.
W chwili braku zasilania urządzenia, AP również nie dostaje prądu co skutkuje brakiem odpowiedzi ping - taki system alarmowy dla urządzeń.
Problem polega na tym, że czasem urządzenie zwolni/nie pracuje przez kilka ms. Skutkuje to fałszywymi alarmami. W związku z tym wymyśliłem, że poprzez funckję sleep() sprawdzę urządzenie ponownie w celu weryfikacji alarmu fałszywego/ prawdziwego.
Problem w tym, że nie działa to tak jak powinno i pomimo ustalonego sleep(40) skrypt, dalej wykrywa brak pracy i dostaję maila z powiadomieniem.
AP uruchamia się w czasie 15-20 s (ping przechodzi po tym czasie).
Co źle robię, a może użyć czegoś innego zamiast sleep ?

$host1 = ip urządzenia
$ison = ustawienie, czy urządzenie w ogóle ma być sprawdzane, czy może jest wyłączone - ustawione manualnie przeze mnie
$nazwa = nazwa
$status = jeśli status 0 dostaję maila, jeśli 1- wszystko ok.
Skrypt ustawiony w cronie co 3 min.