Проверка статуса страницы на 404

голоса: 0

Здравствуйте! Подскажите пожалуйста, как средствами PHP проверить не возвращает ли страница 404 ошибку? В пределах своего домена и по протоколу https. Есть такой вариант, но не уверен, что он самый удачный: 

 <?php $___notjson = 1;  	$url = "https://deathgrind.club";	 	 	if ( isset ( $url ) ) { 		echo json_encode ( isexist($url) ); 	}  	  function isexist($url) {	      	ob_start();     $ch = curl_init();     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);     curl_setopt($ch, CURLOPT_HEADER, 1);     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);     curl_setopt($ch, CURLOPT_URL, $url);     curl_setopt($ch, CURLOPT_REFERER, $url);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     $ok = curl_exec($ch);     curl_close($ch); 	ob_end_clean(); 	$notfound   = '404 Not Found'; 	$pos = strpos($ok, $notfound); 	if ($pos === false) {     	return "Not 404"; 	} else {     	return "404"; 	} 	 }  ?>

Спасибо!

| Автор: | Категория: PHP и API на uCoz

Ответов: 1

голоса: 0
 
Лучший ответ

Загружать в буфер конечно же не целесобразно. Куда быстрее просто проверить заголовки. Для этого существует встроенная в php get_headers. Пример

 $status = array(200,201,202,203,204,205,206,207,226,301,302,303,305,307); $headers = @get_headers('http://yandex.ru/888'); for ( $i=0; $i<count($status); $i++ ) { 	if ( strstr($headers[0], $status[$i]) ) { 		echo 'такой страницы нет'; 		break; 	} }

 

| Автор:
Выбор ответа лучшим | | Автор: Eгор Шульга
Спасибо, Александр! Но не для всех сайтов работает, например, не работает для https://deathgrind.club

Всё, разобрался. Вот код:

  <?php $___notjson = 1;       if( $curl = curl_init() ) { 	curl_setopt($curl,CURLOPT_URL,'https://deathgrind.club'); 	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 	curl_setopt($curl, CURLOPT_NOBODY, true);     curl_setopt($curl, CURLOPT_HEADER, true);     curl_setopt($curl, CURLOPT_HTTPGET, true);     curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);     $out = curl_exec($curl);     echo json_encode ( $out );     curl_close($curl);   }   ?>

 

...