[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка сервера на доступность
Digidie
Доброго времени суток! Нужна помощь, нужно сделать скриптик для проверки состояния сервера. Вот код:
Есть массив:

<?php
$array = array();

$array['ip'][] = "217.29.26.67";
$array['ip'][] = "92.245.98.210";

$array['port'][] = "80";
$array['port'][] = "8089";

$array['address'][] = "geron.bilet.org";
$array['address'][] = "ATC";

//дальше идет функция
public function isOnline($array) {//функция проверки онлайн/офлайн

$ip = $array[0];
$port = $array[1];

$fp = @fsockopen($ip, $port); //Подсоединяемся с хосту "localhost" на 80-й порт

if($fp)
{
// Занести в БД резульат
$st = "yes";
$this->databaseInsert(array($array['ip'][$i],$array['port'][$i],$array['address'][$i]));

} else { $st = "no"; // Занести в БД резульат }
$this->databaseInsert(array($array['ip'][$i],$array['port'][$i],$array['address'][$i]));
}

return $st;

}
?>

Проблема в другом, если сервер существует, то скрипт говорит что да, а вот если нет то можно ждать очень долго. Нужно сделать таймер. Если сервер не отвечает 5 секунд(например), то его не существует. Как выглядит эта функция, и куда её вставить? Помогите пожалуйста! Буду очень признателен ;)



Спустя 1 минута, 36 секунд (18.03.2012 - 20:39) alex12060 написал(а):
Прочти тут: http://php.net/manual/en/function.fsockopen.php

И обрати внимание на последний аргумент:

Цитата
float $timeout = ini_get("default_socket_timeout")


Туда вставляешь желаемый тайм-аут.

Спустя 8 минут, 56 секунд (18.03.2012 - 20:48) Digidie написал(а):
всё ведется к тому что мне потом надо будет по значениям таймаута и сокета сделать график(диаграмму), который(ая) будет показывать статистику. А я даже ума не приложу как это сделать)))

Спустя 1 минута, 52 секунды (18.03.2012 - 20:50) alex12060 написал(а):
Digidie

а что мешает сделать в графике значение > N секунд? Если ты будешь ждать до бесконечности, то толку не будет от этого.

Спустя 2 минуты, 56 секунд (18.03.2012 - 20:53) ADiel написал(а):

<?php
/**
* Класс замера времени в секундах
*
@author Плотников Илья
*
@author ilyaplot@gmail.com
* @example
$time = new TimeTest();
usleep(1000000);
echo $time->getResult();
// Выведет 1.0003161430359
*
@return float Время выполнения
*/

class TimeTest {
private $start = 0;

function __construct(){
$this->start = $this->getTime();
}

function getTime(){
list($usec, $seconds) = explode(" ", microtime());
return $usec + $seconds;
}

function getResult(){
return $this->getTime()-$this->start;
}
}


$time = new TimeTest();
#Тут проверяешь сервер на доступность
echo $time->getResult(); #Время выполнения


Спустя 2 минуты, 49 секунд (18.03.2012 - 20:56) alex12060 написал(а):
ADiel


$start = microtime(true);

// script goes here

echo '<br />'.(float)(microtime(true) - $start);


Так, проще и быстрее. и не нужен класс.

Спустя 59 секунд (18.03.2012 - 20:57) ADiel написал(а):
Взял файл из своей библиотеки. так проще и быстрее, чем писать ответ smile.gif

Спустя 13 минут, 16 секунд (18.03.2012 - 21:10) Digidie написал(а):
Вот весь код, не судите строго только начинаю :D , если можно ошибки и критику или может совет(как дальнейшую мотивацию)

<?php

/**
*
@author digidie
*
@copyright 2012
*/



// Создаем новый класс:
class Cheked {
// данные (свойства):


// методы:


public function getTable($array) {//функция нарисовки таблицы


echo "
<html><head><title>Просто</title>
<link rel='stylesheet' type='text/css' href='style.css'>
</head>
<div id='header'>
<div id='table'>
<table align='center'>
<tr>
<td>#</td>
<td>Сервер</td>
<td>IP</td>
<td>Порт</td>
<td>Состояние</td>
</tr>
"
;

for ($i = 0; $i < count($array); $i++)
{
echo "<tr>
<td>"
. ($i + 1) ."</td>
<td>"
. $array['address'][$i] ."</td>
<td>"
. $array['ip'][$i] ."</td>
<td>"
. $array['port'][$i] ."</td>
<td>"
. $this->isOnline(array($array['ip'][$i],$array['port'][$i])) ."</td>
</tr>"
;
}

echo "<br /><pre>";
echo "</div>";
}
public function database() {//Функция соединения с базой
$db = mysql_connect("localhost","nikita","111111");
mysql_select_db("cheked",$db);
// if($db) { echo "Соединение с базой установлено"; }
}
public function databaseInsert() {
$array = array();

$array['ip'][] = "217.29.26.67";
$array['ip'][] = "92.245.98.210";

$array['port'][] = "80";
$array['port'][] = "8089";

$array['address'][] = "geron.bilet.org";
$array['address'][] = "ATC";

for ($i = 0; $i < count($array['ip']); $i++)
{
$query = "INSERT INTO cheked (ip,port,address) VALUES ('$array[ip][$i]','$array[port][$i]','$array[address][$i]')";
$res = @mysql_query($query);
}
}


public function isOnline($array) {//функция проверки онлайн/офлайн

$ip = $array[0];
$port = $array[1];

$fp = @fsockopen($ip, $port); //Подсоединяемся с хосту "localhost" на 80-й порт

if($fp)
{
// Занести в БД резульат
$st = "<p style='color:green';>yes</p>";
$this->databaseInsert(array($array['ip'][$i],$array['port'][$i],$array['address'][$i]));

} else { $st = "no"; // Занести в БД резульат }
$this->databaseInsert(array($array['ip'][$i],$array['port'][$i],$array['address'][$i]));
}

return $st;

}
}

// Создаем объект класса Coor:
$cheked = new Cheked;

$array['ip'][] = "217.29.26.67";
$array['ip'][] = "127.0.0.1";
$array['ip'][] = "92.245.98.210";

$array['address'][] = "geron.bilet.org";
$array['address'][] = "Localhost";
$array['address'][] = "ATC";

$array['port'][] = "80";
$array['port'][] = "80";
$array['port'][] = "8089";


$cheked->getTable($array);

$cheked->database();
$cheked->databaseInsert();
?>

Спустя 10 минут, 5 секунд (18.03.2012 - 21:20) ADiel написал(а):
for ($i = 0; $i < count($array); $i++) = foreach($array as $i=>$val)

Спустя 39 минут, 58 секунд (18.03.2012 - 22:00) alex12060 написал(а):
ADiel

Зря советуешь :)


$arr = array();

for ($i = 0; $i < 1000000; ++$i)
$arr[] = $i;

$start = microtime(true);

$c = count($arr);

for($i = 0; $i < $c; ++$i) {}

echo (float)(microtime(true) - $start);

// 0.12021899223328



$arr = array();

for ($i = 0; $i < 1000000; ++$i)
$arr[] = $i;

$start = microtime(true);

foreach($arr as $k => $v) {}

echo (float)(microtime(true) - $start);

// 0.2780659198761


Разнца в 1 десятую секунды)
В его случае, это лучше. Единственное, что могу ему посоветовать - вынести count() в отдельную переменную, как у меня здесь, в тесте.

Спустя 8 минут, 39 секунд (18.03.2012 - 22:09) ADiel написал(а):
Да уж, я думал наоборот.

Спустя 8 часов, 22 минуты, 47 секунд (19.03.2012 - 06:31) Digidie написал(а):
Я так понимаю это милисекунды. А вот если мне например надо будет чтобы было - Время отклика сервера: 3,2секунд? а не 1,23148965423)))

Спустя 2 часа, 8 минут, 37 секунд (19.03.2012 - 08:40) Visman написал(а):
echo round(1.23148965423, 1); 

Спустя 2 часа, 53 минуты, 34 секунды (19.03.2012 - 11:34) ADiel написал(а):
Мой скрипт отдает в секундах =)

Спустя 8 минут, 53 секунды (19.03.2012 - 11:42) Visman написал(а):
ADiel, я так понял человеку захотелось сократить число знаков после запятой.

Спустя 2 часа, 3 минуты, 22 секунды (19.03.2012 - 13:46) ADiel написал(а):
Может быть smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.