Проверка ссылок в PHP - PullRequest
       4

Проверка ссылок в PHP

0 голосов
/ 02 октября 2018

Я создаю проверку битых ссылок.До сих пор мне удавалось заставить это сканировать указанную пользователем страницу для ссылок, а затем отображать полный список ссылок, так что я знаю, что они их находят.Что мне нужно сделать сейчас, так это заставить его проверить каждую из этих ссылок на наличие ответа HTTP (который я затем могу выделить некоторым способом позже).

 $html = file_get_contents($_POST['urlInput']);

    $dom = new DOMDocument();
    @$dom->loadHTML($html);

    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");

    for ($i = 0; $i < $hrefs->length; $i++) {
            $href = $hrefs->item($i);
            $url = $href->getAttribute('href');
            echo $url.'<br>';

Именно здесь начинается моя проблема.Приведенный выше код найдет и отобразит все ссылки на странице, и я пытаюсь выяснить, как проверить каждую из них.Приведенный ниже код не работает, но, будучи совершенно новым для PHP, я не понимаю, что это такое и / или не делает!

 get_http_response_code($url);
    }




    function get_http_response_code($url) {
      $headers = get_headers($url);
      return substr($headers[0], 9, 3);
    }

    $get_http_response_code = get_http_response_code($url);

    if ( $get_http_response_code == 200 ) {
      echo "Working!";
    } else {
      echo "Broken!";
    }

А сейчас я просто хотел бы узнать, как заставить его работать или не работать для каждой ссылки.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Решение найдено:

<?php

$website = $_POST['urlInput'];

$html = file_get_contents($website);

$website = preg_replace('{/$}', '', $website);

$dom = new DOMDocument();
@$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");


for ($i = 0; $i < $hrefs->length; $i++) {
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');

//The following two lines included to handle relative paths

        $url = ltrim($url, '/');
        $url = isAbsoluteUrl($url) ? $url : $website.'/'.$url;

//It then calls this function for each iteration of loop



 get_http_response_code($url);
}


function get_http_response_code($url) {

        $handle = curl_init($url);
        curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);


        $response = curl_exec($handle);


        $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
        if($httpCode == 200) {
                echo $url . ": <span style='color: green'>ok</span> <br>";
        } else if($httpCode == 301 || $httpCode == 302) {
                echo $url . ": <span style='color: orange'>Redirected</span> <br>";
        } else {
                echo $url . ": <span style='color: red'>Nook</span> <br>";
        }



        curl_close($handle);
}

function isAbsoluteUrl($url)
    {
        if (strpos($url, 'http://') !== false || strpos($url, 'https://') !== false) {
                return true;
              }

              return false;
    }

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...