Проверьте, не связаны ли ссылки на php

Интересно, есть ли хороший PHP-скрипт (библиотеки), чтобы проверить, не сломалась ли ссылка? У меня есть ссылки на документы в таблице mysql, и вы можете просто проверить, ведет ли ссылка к документу, или если я перенаправлен на другой URL. Есть идеи? Я бы предпочел сделать это на PHP.

Может быть связано с: проверка ссылки работает, а если визуально не идентифицировать ее как сломанную

Solutions Collecting From Web of "Проверьте, не связаны ли ссылки на php"

Вы можете проверить неработающую ссылку, используя эту функцию:

function check_url($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); $headers = curl_getinfo($ch); curl_close($ch); return $headers['http_code']; } 

Для этого вам необходимо установить CURL . Теперь вы можете проверить неработающие ссылки, используя:

 $check_url_status = check_url($url); if ($check_url_status == '200') echo "Link Works"; else echo "Broken Link"; 

Также проверьте эту ссылку для кодов состояния HTTP : коды состояния HTTP

Я думаю, вы также можете проверить коды статуса 301 и 302 .

Также будет использоваться get_headers . Но это работает, только если ваша версия PHP больше 5:

 function check_url($url) { $headers = @get_headers( $url); $headers = (is_array($headers)) ? implode( "\n ", $headers) : $headers; return (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers); } 

В этом случае просто проверьте вывод:

 if (check_url($url)) echo "Link Works"; else echo "Broken Link"; 

Надеюсь, это поможет вам :).

Вы можете сделать это несколькими способами:

Первый путь – завиток

 function url_exists($url) { $ch = @curl_init($url); @curl_setopt($ch, CURLOPT_HEADER, TRUE); @curl_setopt($ch, CURLOPT_NOBODY, TRUE); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); @curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $status = array(); preg_match('/HTTP\/.* ([0-9]+) .*/', @curl_exec($ch) , $status); return ($status[1] == 200); } 

Второй способ – если у вас нет установленного завитка – получите заголовки

 function url_exists($url) { $h = get_headers($url); $status = array(); preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status); return ($status[1] == 200); } 

Третий путь – fopen

 function url_exists($url){ $open = @fopen($url,'r'); if($handle !== false){ return true; }else{ return false; } } 

Первый и второй решения

В качестве быстрой проверки обхода можно использовать глобальную переменную $ http_response_header с функцией file_get_contents () .

Например (извлечено из документации PHP):

 <?php function get_contents() { file_get_contents("http://example.com"); var_dump($http_response_header); } get_contents(); var_dump($http_response_header); 

Затем проверьте код состояния в первой строке для «HTTP / 1.1 200 OK» или других кодов состояния HTTP .

Попробуй это:

 $url = '[your_url]'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); if ($result === false) { echo 'broken url'; } else { $newUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); if ($newUrl !== $url) { echo 'redirect to: ' . $newUrl; } } curl_close($curl);