我一直试图让这个脚本在几天内工作,我认为我几乎在那里,但它不是很有效。我对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>';
}
?>