网址链接状态审查工具


检查结果'; 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 '<tr>'; echo '<td><a href=' . htmlspecialchars($result['original_url']) . ' target=_blank>' . htmlspecialchars($result['original_url']) . '</a></td>'; echo '<td class="' . $statusClass . '">' . $result['status_code'] . '</td>'; echo '<td>' . htmlspecialchars($result['title']) . '</td>'; echo '</tr>'; } ?> </div> </body> </html>