Jump to content

Recommended Posts

Добрый вечер всем! Столкнулся с небольшой проблемой на сайте. Пишу скрипт проверки доступности сайта. Проверка осуществляется в PHP функцией headers($url). Если сервер возвращает 200ОК, тогда процесс идёт дальше. Что делать с теми случаями, когда адрес сайта ввели неверно? На экран отображается вот такая ошибка:

 

Warning: get_headers() [function.get-headers]: php_network_getaddresses: getaddrinfo failed: in \www\functions\main.php on line 53

 

Мне нужно просто отключить вывод ошибок на экран и выводить "Неверно введен URL". Правильно ли я понимаю? Или как-то можно вообще избежать возникновения ошибок?. Заранее спасибо.

Link to post
Share on other sites

HTML:

<form action="" method="post">
<input type="text" placeholder="Ваш сайт" name="site" />
<input type="submit" name="submit" value="Проверить" />
</form>

PHP:

<?php

if( isset( $_POST['submit'] ) && strip_tags(trim($_POST['submit'])) == 'Отправить' ){
 # получаем URL
 $_url = strip_tags( trim( $_POST['site'] ));

 $err = false;

 # прим: i.ua == 4 символа
 if( strlen($_url) > 3 ){
  # проверяем URL
  if( substr($_url, 0, 4) == 'http' ){
     # не трогаем
  } else if( substr($_url, 0, 2) == '//' ){
    $_url = 'http:'.$_url;
  } else {
    $_url = 'http://'.$_url;
  }
  # можно еще через Preg_match прогнать
 } else $err = true;
# проверяем шапку сайта
 if( ! $err ){
  # выключаем ошибки "@"
  $headers = @get_headers( $_url );
  # а тут уже делаем что хотим
  $status = false;
  foreach( $headers as $header ){
    if( stripos($header, '200 OK' ) !== false )
       $status = true;
  }

  if( $status) echo 'сайт доступен';
  else echo 'Оопс сайт не доступен O_щ';

 } else echo 'неправильный URL адрес сайта';

}
?>
Edited by rafonets
Link to post
Share on other sites

Поделитесь скриптом как сделаете?

//ПРОВЕРКА СУЩЕСТВОВАНИЯ САЙТА
function site_exists($domain) {
	if (!get_headers(convert_url($domain), 1)) {return false;} else {return true;}
}

//КОНВЕРТАЦИЯ АДРЕСА URL (1 - КОРОТКИЙ, 2 - ПОЛНЫЙ)
function convert_url($domain,$type = 2) {
	
	if ( (strpos($domain,'https://')) === FALSE ){
		if ( (strpos($domain,'http://')) === FALSE ) {
			$full = 'http://' . $domain;
			$short = $domain;
		} else { $full = $domain; $short = str_replace('http://','',$domain); }
	} else {
		$full = $domain;
		$short = str_replace('https://','',$domain);
	}
	
	switch ($type) {
		case 1:
		return $short;
		break;
		case 2:
		return $full;
		break;
	}
}

Держите) Вторая функция convert_url необязательная. Она проверяет ввод URL-адреса и конвертирует его, добавляя HTTP:// в случае надобности (по умолчанию 2 =  полный адрес).

 

Когда вызываю функцию, делаю так (чтобы не выводилась ошибка в случае несуществования сайта).

@site_exists($_POST['domain']) OR die('Такого сайта не существует');

Спасибо Твистер за совет :)

Link to post
Share on other sites

 

HTML:

<form action="" method="post">
<input type="text" placeholder="Ваш сайт" name="site" />
<input type="submit" name="submit" value="Проверить" />
</form>

PHP:

<?php

if( isset( $_POST['submit'] ) && strip_tags(trim($_POST['submit'])) == 'Отправить' ){
 # получаем URL
 $_url = strip_tags( trim( $_POST['site'] ));

 $err = false;

 # прим: i.ua == 4 символа
 if( strlen($_url) > 3 ){
  # проверяем URL
  if( substr($_url, 0, 4) == 'http' ){
     # не трогаем
  } else if( substr($_url, 0, 2) == '//' ){
    $_url = 'http:'.$_url;
  } else {
    $_url = 'http://'.$_url;
  }
  # можно еще через Preg_match прогнать
 } else $err = true;
# проверяем шапку сайта
 if( ! $err ){
  # выключаем ошибки "@"
  $headers = @get_headers( $_url );
  # а тут уже делаем что хотим
 } else echo 'неправильный URL адрес сайта';

}
?>

 

Прям-таки очень похож код на мой :D

Link to post
Share on other sites

Спасибо большое!я сейчас в бодьнице с планшета,но сделаю закладку и дома его поставлю, очень нужен.можете прикрутить инструкцию,для меня и для тех кто не понимает в пчп

Link to post
Share on other sites

Спасибо большое!я сейчас в бодьнице с планшета,но сделаю закладку и дома его поставлю, очень нужен.можете прикрутить инструкцию,для меня и для тех кто не понимает в пчп

//ФАЙЛ functions.php

//ПРОВЕРКА СУЩЕСТВОВАНИЯ САЙТА
function site_exists($domain) {
//ПРОВЕРЯЕМ - ОТВЕЧАЕТ ЛИ САЙТ НА ЗАПРОС, ЕСЛИ ОТВЕЧАЕТ - САЙТ СУЩЕСТВУЕТ
	if (!get_headers(convert_url($domain), 1)) {return false;} else {return true;}
}
 
//КОНВЕРТАЦИЯ АДРЕСА URL (1 - КОРОТКИЙ, 2 - ПОЛНЫЙ)
function convert_url($domain,$type = 2) {

	//ИЩЕМ В ВВОДИМОМ АДРЕСЕ https: или http:, если не находим, то приписываем http: к короткому адресу (как бы подразумевая, что пользователь имел ввиду http: вводя короткий адрес)

	if ( (strpos($domain,'https://')) === FALSE ){
		if ( (strpos($domain,'http://')) === FALSE ) {
			$full = 'http://' . $domain;
			$short = $domain;
		} else { $full = $domain; $short = str_replace('http://','',$domain); }
	} else {
		$full = $domain;
		$short = str_replace('https://','',$domain);
	}
	
        //ПЕРЕКЛЮЧАТЕЛЬ ФУНКЦИИ 1 - КОРОТКИЙ URL (БЕЗ HTTP), 2 - ПОЛНЫЙ (С HTTP)
        //ЗНАЧЕНИЕ БЕРЕТСЯ ИЗ ПАРАМЕТРА ФУНКЦИИ
	switch ($type) {
		case 1:
		return $short;
                //ВЕРНУЛИ КОРОТКИЙ УРЛ ЕСЛИ 1
		break;
		case 2:
		return $full;
                //ВЕРНУЛИ ПОЛНЫЙ УРЛ ЕСЛИ 2
		break;
	}
}
<!--- HTML !--->

<form action="check.php" method="POST">
  <input type="text" name="domain">
  <input type="submit" value="проверить">
</form>
//ФАЙЛ check.php
<?php

include "functions.php"; //подключаем функцию проверки

if (isset($_POST['domain'])) { //проверяем, ввёл ли пользователь данные в форму

  if (site_exists($_POST['domain'])) {echo 'Сайт существует';} //проверяем ответ функции site_exists() из functions.php и выводим ответ
  else {echo 'Сайта не существует';} 

else { echo 'Заполните поле ввода сайта'; } //если проверка не прошла успешно (пустое поле для ввода)

?>

Прокомментировал, как и просили :)

Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...