[英]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.