网址链接状态审查工具
检查结果';
echo '
';
echo '| 网址 | 状态码 | 网页标题 |
';
foreach ($urls as $url) {
$url = trim($url);
if (!empty($url)) {
$result = checkUrlStatus($url);
displayResult($result);
}
}
echo '
';
}
/**
* 检查URL状态
*/
function checkUrlStatus($url) {
// 自动添加协议前缀
if (!preg_match('/^https?:\/\//', $url)) {
$url = 'http://' . $url;
}
$result = [
'original_url' => $url,
'status_code' => 0,
'final_url' => $url,
'title' => '',
'error' => ''
];
// 初始化cURL[3,5](@ref)
$ch = curl_init();
// 设置cURL选项[8](@ref)
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true, // 跟随重定向[5](@ref)
CURLOPT_MAXREDIRS => 3, // 最大重定向次数
CURLOPT_TIMEOUT => 5, // 超时时间
CURLOPT_SSL_VERIFYPEER => false, // 不验证SSL证书(仅用于测试)
CURLOPT_HEADER => false,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]);
// 执行请求
$response = curl_exec($ch);
if (curl_errno($ch)) {
$result['error'] = 'cURL错误: ' . curl_error($ch);
} else {
// 获取HTTP状态码[6,8](@ref)
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result['status_code'] = $httpCode;
$result['final_url'] = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
// 根据状态码处理
if ($httpCode == 200 || $httpCode == 403 || $httpCode == 404 || $httpCode == 500) {
$result['title'] = extractTitle($response);
} elseif ($httpCode == 301 || $httpCode == 302) {
// 对于重定向,尝试获取最终页面的标题
if ($result['final_url'] != $url) {
$redirectResult = checkRedirectUrl($result['final_url']);
$result['title'] = $redirectResult['title'];
}
}
}
curl_close($ch);
return $result;
}
/**
* 检查重定向URL
*/
function checkRedirectUrl($url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
]);
$response = curl_exec($ch);
$title = '';
if (!curl_errno($ch)) {
$title = extractTitle($response);
}
curl_close($ch);
return ['title' => $title];
}
/**
* 从HTML内容中提取标题[9,11](@ref)
*/
function extractTitle($html) {
if (empty($html)) return '';
// 方法1:使用正则表达式提取title标签
if (preg_match('/
(.*?)<\/title>/is', $html, $matches)) {
$title = trim($matches[1]);
$title = html_entity_decode($title, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$title = mb_substr($title, 0, 100, 'UTF-8'); // 限制标题长度
return $title;
}
// 方法2:使用DOMDocument(更稳定)
if (class_exists('DOMDocument')) {
libxml_use_internal_errors(true); // 禁止显示HTML错误
$dom = new DOMDocument();
@$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$titleElements = $dom->getElementsByTagName('title');
if ($titleElements->length > 0) {
$title = trim($titleElements->item(0)->textContent);
$title = html_entity_decode($title, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$title = mb_substr($title, 0, 100, 'UTF-8');
return $title;
}
}
return '*未找到网站标题,请人工验证*';
}
/**
* 显示结果
*/
function displayResult($result) {
$statusClass = 'status-error';
if ($result['status_code'] == 200) {
$statusClass = 'status-200';
} elseif ($result['status_code'] == 301 || $result['status_code'] == 302) {
$statusClass = 'status-301';
}
echo '';
echo '| ' . htmlspecialchars($result['original_url']) . ' | ';
echo '' . $result['status_code'] . ' | ';
echo '' . htmlspecialchars($result['title']) . ' | ';
echo '
';
}
?>