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