Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка статуса сайта / 16 сообщений из 16, страница 1 из 1
25.02.2010, 15:38
    #36488228
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Вопрос такой, как можно быстро проверить статусы сайтов (более 5000) по 80 порту?
...
Рейтинг: 0 / 0
25.02.2010, 15:40
    #36488233
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
зависит от того что значит "Проверить"
...
Рейтинг: 0 / 0
25.02.2010, 15:42
    #36488242
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Проверяю таки образом, но через этот метод, скрипт может грузиться аж пол дня:

Код: plaintext
1.
2.
3.
if ($fp=fsockopen($ip, 80 ,$ERROR_NO,$ERROR_STR,(float) 0 . 5 ))
{
	echo "Сайт доступен";
}
...
Рейтинг: 0 / 0
25.02.2010, 15:52
    #36488280
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
jemojeПроверяю таки образом, но через этот метод, скрипт может грузиться аж пол дня
1. Такая задача хорошо решается с помощью многопоточного кода. К сожалению, PHP не приспособлен для написания многопоточного кода. Разумней воспользоваться для решения поставленной задачи другим языком программирования.

2. Использованный Вами способ проверки позволяет проверить запущен ли web-сервер на 80-ом порту, но состояние конкретного сайта так не проверишь (на одном сервере могут работать тысячи виртуальных хостов). Для проверки состояния сайта надо слать HTTP-запрос.
...
Рейтинг: 0 / 0
25.02.2010, 15:53
    #36488282
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
авторДля проверки состояния сайта надо слать HTTP-запрос.
а потом еще и парсить ответ.
...
Рейтинг: 0 / 0
25.02.2010, 15:58
    #36488296
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Kachalov1. Такая задача хорошо решается с помощью многопоточного кода. К сожалению, PHP не приспособлен для написания многопоточного кода. Разумней воспользоваться для решения поставленной задачи другим языком программирования.
Можно через cURL, в остальном согласен.
...
Рейтинг: 0 / 0
25.02.2010, 17:15
    #36488520
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Мне нужен только 80 порт, остальное меня не интересует, как оптимизировать код, чтобы он быстро выдал результат?
...
Рейтинг: 0 / 0
25.02.2010, 18:27
    #36488711
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
jemojeМне нужен только 80 порт, остальное меня не интересует, как оптимизировать код, чтобы он быстро выдал результат?
На самом деле вам просто пытаются сказать, что открытый 80 порт является необходимым, но не достаточным критерием.
...
Рейтинг: 0 / 0
25.02.2010, 20:26
    #36488901
Anjey aka PM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
jemoje,

как минимум ЦУрлом в несколько потоков запрсы HEAD / на каждый из сайтов, это чтоб побыстрее и трафика по-меньше
...
Рейтинг: 0 / 0
26.02.2010, 16:39
    #36490557
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Anjey aka PMjemoje,

как минимум ЦУрлом в несколько потоков запрсы HEAD / на каждый из сайтов, это чтоб побыстрее и трафика по-меньше

Можно поподробней, желательно с примеров.
...
Рейтинг: 0 / 0
26.02.2010, 20:34
    #36491134
Anjey aka PM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
jemoje,

Тынц , тынц , CURLOPT_NOBODY

В принципе, примеры там тоже есть
...
Рейтинг: 0 / 0
12.03.2010, 13:00
    #36516465
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
Вот сделал скрипт с помощью curl, с начало получает статус сайта, если статус сайта 200, то начинает искать на сайте необходимые символы, среднее время выполнения скрипта для 1 сайт ~1 сек.
Как уменьшить время выполнения, т.к. одна секунда очень долго, получается, что за час скрипт только проиндексирует 3600 сайтов плюсом нагрузка на пхп.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
<?
set_time_limit( 0 );

function getmicrotime()
{
   $mt = explode( " ", microtime() );
   return ( (float)$mt[ 0 ] + (float)$mt[ 1 ] );
}

$time_start = getmicrotime();

function get_web_page($url)
{
  $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

  $ch = curl_init($url);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1 );   // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_HEADER,  0 );           // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION,  1 );   // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,  5 ); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT,  10 );        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS,  10 );       // останавливаться после  10 -ого редиректа

  $content = curl_exec( $ch );
  $err     = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );

  $header['errno']   = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}

function get_web_code($url,$code_1,$code_2)
{
	$data = file_get_contents($url);
	if(strpos($data, $code_1) === false || strpos($data, $code_2) === false)
	return  0 ;
	else
	return  1 ;
}

$v_url=array("http://speedtest.net/");

foreach ($v_url as $url)
{
	$result = get_web_page($url);
	if ( $result['http_code'] !=  200  )
	{
		print "Site ".$url." <b style='color:red;'>offline</b>, ";
	}
	else
	{
		print "Site ".$url." <b style='color:green;'>online</b>, ";
	
		$result2 = get_web_code($url,"title","head");
		if ($result2)
		{
			print "code <b style='color:green;'>found</b>.<br/>";
		}
		else
		{
			print "code <b style='color:red;'>not found</b>.<br/>";
		}
	}
}

$time_end = getmicrotime();
$test = $time_end - $time_start;
print "Script works " . round( $test ,  4  ) . " seconds";
?>
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.11.2013, 14:54
    #38478337
vitalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
jemoje,
удалось ли написать скрипт с меньшим временем проверки?
...
Рейтинг: 0 / 0
26.11.2013, 15:02
    #38478367
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
курл + таймаут?
...
Рейтинг: 0 / 0
26.11.2013, 15:04
    #38478372
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
ScareCrow,

И чем тут поможет таймаут? Если поставить одну секунду - будет гора промашек, ибо не каждый сервер так быстро отзывается.
...
Рейтинг: 0 / 0
26.11.2013, 15:05
    #38478374
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка статуса сайта
По теме "ускорения" есть смысл запускать проверку в несколько параллельных потоков.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка статуса сайта / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]