用于检查页面上断开的链接的PHP脚本

时间:2013-11-19 08:37:26

标签: php hyperlink http-status-code-404 response

我一直试图让这个脚本在几天内工作,我认为我几乎在那里,但它不是很有效。我对PHP的理解是有限的,我已经从许多其他脚本中一起攻击了这个脚本。

我已将脚本分成两部分。这些部分中的每一部分都可以在自己运行时工作,但当它们放在一起时,页面永远不会加载。

第一部分检查任何外部链接的URL,忽略任何nofollow链接。

第二部分检查服务器响应头是否为URL

整个脚本应该在网页上找到任何外部的,跟随的链接,然后检查是否有任何链接被破坏。

非常感谢任何有助于实现这一目标的帮助。

<?php

// This is the first part of the script to get a list of external links from a web page ignoring any nofollow links

// Set the parent URL
$url = 'http://www.example.com';
$pUrl = parse_url($url);

// Load the HTML into a DOMDocument
$doc = new DOMDocument;
@$doc->loadHTMLFile($url);

// Look for all the 'a' elements
$links = $doc->getElementsByTagName('a');


$numLinks = 0;
foreach ($links as $link) {

// Exclude if not a link or has 'nofollow'
preg_match_all('/\S+/', strtolower($link->getAttribute('rel')), $rel);
if (!$link->hasAttribute('href') || in_array('nofollow', $rel[0])) {
    continue;
}

// Exclude if internal link
$href = $link->getAttribute('href');

if (substr($href, 0, 2) === '//') {
    // Deal with protocol relative URLs as found on Wikipedia
    $href = $pUrl['scheme'] . ':' . $href;
}

$pHref = @parse_url($href);
if (!$pHref || !isset($pHref['host']) ||
    strtolower($pHref['host']) === strtolower($pUrl['host'])
) {
    continue;
}

// Increment counter otherwise
echo $link->getAttribute('href') . " - ";
$numLinks++;



// This is the second part of the script to check to see if the link returns no response or a 404 response.

// Reset $checkurl
$checkurl = '';

// Set the URL to check server response code
$checkurl = $link->getAttribute('href');


// Check header response for URL
file_get_contents($checkurl);
$response = $http_response_header[0];

// If 404 exists in response then set as 404
if (strpos($response,'404') !== false) {
$server_response = '404';
}

// If there is no response then set as 404
if ($response == '') {
$server_response = '404';
}

echo $server_response;
echo '<br>';

} 

?>

0 个答案:

没有答案