繁体   English   中英

验证 PHP 中的链接

[英]Validating links in PHP

我正在构建一个断开的链接检查器。 到目前为止,我已经设法让它抓取用户指定的页面以获取链接,然后回显完整的链接列表,所以我知道它正在找到它们。 我现在需要做的是让它检查 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!";
    }

现在我只想找出如何让它回显每个链接的工作或损坏。

提前致谢!

找到的解决方法:

<?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;
    }

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM