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

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

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

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

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

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

Тынц , тынц , CURLOPT_NOBODY

В принципе, примеры там тоже есть
...
Рейтинг: 0 / 0
Проверка статуса сайта
    #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
Период между сообщениями больше года.
Проверка статуса сайта
    #38478337
vitalka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jemoje,
удалось ли написать скрипт с меньшим временем проверки?
...
Рейтинг: 0 / 0
Проверка статуса сайта
    #38478367
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
курл + таймаут?
...
Рейтинг: 0 / 0
Проверка статуса сайта
    #38478372
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

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


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