define('TIME_LIMIT', 0); $is_safe_mode = ini_get('safe_mode') == '1' ? 1 : 0; if (!$is_safe_mode && function_exists('set_time_limit')) set_time_limit(TIME_LIMIT);
header("Expires: Tue, 1 Jul 2003 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Pragma: no-cache");
if( !isSet($_GET['test']) )$_GET['test'] = ""; list($usec, $sec) = explode(" ", microtime()); $timer_start = ((float)$usec + (float)$sec); if($_GET['test'] == "")$output = "<h2 align=\"center\">Поиск "битых" линков:</h2>".first_form(); else { $output = "<h2 align=\"center\">Результаты поиска:</h2>"; if($_GET['who']=="1") { $links = get_objects($_GET['test'], 2); $output .= implode( "<br>", check_curl($links) ); $output .= "<h2 align=\"center\">Новый поиск:</h2>".first_form(); } else { $first_pass = get_objects($_GET['test'], 1); error_reporting(0); $output .= "Проверка страницы ".$_GET['test']." :<ul>"; $links = get_objects($_GET['test'], 2); $output .= implode( "<br>", check_curl($links) ); $output .= "</ul>"; foreach($first_pass as $url) { if( $url!=$_GET['test'] and $url!=$_GET['test']."/" and stristr($url,$_GET['test']) ) { $output .= "Проверка страницы ".$url." :<ul>"; $links = get_objects($_GET['test'], 2); if($links == "0")$output .= "Страница недоступна!"; else $output .= implode( "<br>", check_curl($links) ); $output .= "</ul>"; } } } list($usec, $sec) = explode(" ", microtime()); $timer_end = ((float)$usec + (float)$sec); $output .= "<div align=center>Поиск занял ".($timer_end-$timer_start)." секунд.</div>"; $output .= "<h2 align=\"center\">Новый поиск:</h2>".first_form(); }
echo '<html> <head> <title>Поиск "битых" линков и потерянных имиджей</title> </head> <body> '.$output.' </body> </html>';
function first_form() { if($_GET['test'] == "")$test_URL = "http://"; else $test_URL = $_GET['test']; return '<form action=""><div align="center"> <strong>URL проверяемой страницы</strong>: <input type="text" name="test" id="test" value="'.$test_URL.'" size="37" maxlength="128"> <input type="submit" value="Проверить!"> <br><br><nobr><strong>Проверить</strong>: <input type="radio" name="who" checked=checked value="1"> только одну страницу; <input type="radio" name="who" value="2"> и все связанные с этой страницей на этом сайте.</nobr> <br><br>(URL должен заканчиваться знаком "/" или именем файла)</div></form>'; }
function get_objects($url, $pass) { $text = file_get_contents($url); if(strlen($text)==0) return "0"; $text = str_replace("''","",$text); $text = str_replace("\"\"","",$text); $links = array(); if($pass==2) { // Поиск для конструкций src="..." preg_match_all("/src=\"(.+?)\"/is",$text,$tmp_links); while(count($tmp_links[0])) { $links = array_merge($links,$tmp_links[1]); // добавляем свеженайденые URL в список $text = str_replace($tmp_links[0],$tmp_links[1],$text); // убираем найденые URL из текста $text = str_replace("src=\"\"","",$text); preg_match_all("/src=\"(.+?)\"/is",$text,$tmp_links); // продолжаем поиск } // Повторяем поиск для конструкций src='...' preg_match_all("/src='(.+?)'/is",$text,$tmp_links); while(count($tmp_links[0])) { $links = array_merge($links,$tmp_links[1]); $text = str_replace($tmp_links[0],$tmp_links[1],$text); $text = str_replace("src=''","",$text); preg_match_all("/src='(.+?)'/is",$text,$tmp_links); } } // Повторяем поиск для конструкций href="..." preg_match_all("/href=\"(.+?)\"/is",$text,$tmp_links); while(count($tmp_links[0])) { $links = array_merge($links,$tmp_links[1]); // добавляем свеженайденые URL в список $text = str_replace($tmp_links[0],$tmp_links[1],$text); // убираем найденые URL из текста $text = str_replace("src=\"\"","",$text); preg_match_all("/href=\"(.+?)\"/is",$text,$tmp_links); // продолжаем поиск } // Повторяем поиск для конструкций href='...' preg_match_all("/href='(.+?)'/is",$text,$tmp_links); while(count($tmp_links[0])) { $links = array_merge($links,$tmp_links[1]); $text = str_replace($tmp_links[0],$tmp_links[1],$text); $text = str_replace("src=''","",$text); preg_match_all("/href='(.+?)'/is",$text,$tmp_links); } $base_href = explode("/",$_GET['test']); $base_href[(count($base_href)-1)] = ""; $base_href = implode("/",$base_href); $links_cleaned = Array(); foreach($links as $link) { $href = $base_href; while( substr($link,0,3)=="../" ) { $link = substr($link,3); $href = substr($base_href,0,-1); $href = explode("/",$href); $href[(count($href)-1)] = ""; $href = implode("/",$href); } if(substr($link,0,7)!="http://")$link = $href. $link = str_replace("/./","/",$link); if( !stristr($link,"javascript:") and !stristr($link,"(") and !stristr($link,"+") and !stristr($link,"mailto:") ) $links_cleaned[] = $link; } $links_cleaned = array_unique($links_cleaned); return $links_cleaned; }
function check_curl($linksz){ $links = array(); foreach($linksz as $link) { $kode = hget($link); if( intval($kode)<400 and intval($kode)>99 )$links[] = "<font color=\"#008000\">".$link." (код ".$kode.")</font>"; else $links[] = "<font color=\"#FF0000\"><strong>".$link."</strong> (ошибка ".$kode.")</font>"; } return $links; }
function hget($in){ $in=str_replace("\n",'',$in); $in=str_replace("\r",'',$in); $in=str_replace(" ",'',$in); $ch = curl_init(); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_URL, $in); // что чекаем curl_setopt($ch, CURLOPT_HEADER, 1); // нам _нужен_ заголовок curl_setopt($ch, CURLOPT_NOBODY, 1); // нам _НЕ_ нужно мертвое тело ответа curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_REFERER, $in); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"); $result=curl_exec($ch);// загрузка страницы return curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); } |