Есть массив:
<?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 написал(а):
Цитата |
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 секунд? Если ты будешь ждать до бесконечности, то толку не будет от этого.
а что мешает сделать в графике значение > 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 написал(а):
Взял файл из своей библиотеки. так проще и быстрее, чем писать ответ

Спустя 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
Зря советуешь :)
Разнца в 1 десятую секунды)
В его случае, это лучше. Единственное, что могу ему посоветовать - вынести count() в отдельную переменную, как у меня здесь, в тесте.
Зря советуешь :)
$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 написал(а):
Может быть
