/',$content)){$content=NULL;} //Собираем все ссылки со страницы во временный массив, с помощью регулярного выражения. preg_match_all("/<[Aa][\s]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\s]*([^ \"'>\s#]+)[^>]*>/",$content,$tmp);$content=NULL; //Добавляем в массив links все ссылки не имеющие аттрибут nofollow foreach($tmp[0] as $k => $v){if(!preg_match('/<.*[Rr][Ee][Ll]=.?("|\'|).*[Nn][Oo][Ff][Oo][Ll][Ll][Oo][Ww].*?("|\'|).*/',$v)){$links[$k]=$tmp[1][$k];}} unset($tmp); //Обрабатываем полученные ссылки, отбрасываем "плохие", а потом и с них собираем... for ($i = 0; $i < count($links); $i++) { //Если слишком много ссылок в массиве, то пора прекращать нашу деятельность (читай спецификацию) if(count($urls)>49900){return false;} //Если не установлена схема и хост ссылки, то подставляем наш хост if(!strstr($links[$i],$scheme.$host)){$links[$i]=$scheme.$host.$links[$i];} //Убираем якори у ссылок $links[$i]=preg_replace("/#.*/X", "",$links[$i]); //Узнаём информацию о ссылке $urlinfo=@parse_url($links[$i]);if(!isset($urlinfo['path'])){$urlinfo['path']=NULL;} //Если хост совсем не наш, ссылка на главную, на почту или мы её уже обрабатывали - то заканчиваем работу с этой ссылкой if((isset($urlinfo['host']) AND $urlinfo['host']!=$host) OR $urlinfo['path']=='/' OR isset($urls[$links[$i]]) OR strstr($links[$i],'@')){continue;} //Если ссылка в нашем запрещающем списке, то также прекращаем с ней работать $nofoll=0;if($nofollow!=NULL){foreach($nofollow as $of){if(strstr($links[$i],$of)){$nofoll=1;break;}}}if($nofoll==1){continue;} //Если задано расширение ссылки и оно не разрешёно, то ссылка не проходит $ext=end(explode('.',$urlinfo['path'])); $noext=0;if($ext!='' AND strstr($urlinfo['path'],'.') AND count($extensions)!=0){$noext=1;foreach($extensions as $of){if($ext==$of){$noext=0;continue;}}}if($noext==1){continue;} //Заносим ссылку в массив и отмечаем непроверенной (с неё мы ещё не забирали другие ссылки) $urls[$links[$i]]=0; //Проверяем ссылки с этой страницы sitemap_geturls($links[$i],$host,$scheme,$nofollow,$extensions,$urls); } return true; } // (START!) Первоначальный старт функции для проверки главной страницы и последующих sitemap_geturls($scheme.$host,$host,$scheme,$nofollow,$extensions,$urls); // Когда все ссылки собраны, то обрабатываем их и записываем в файлы sitemap.xml и sitemap.txt (должны быть права на запись) $sitemapXML=' '; $sitemapTXT=NULL; // Добавляем каждую ссылку foreach($urls as $k => $v){$sitemapXML.="\r\n{$k}weekly1.0";$sitemapTXT.="\r\n".$k;} //Окончание для файла sitemap.xml $sitemapXML.="\r\n"; //Некоторые символы, а также кириллица - должны быть в правильной кодировке/виде (по спецификации) $sitemapXML=trim(strtr($sitemapXML,array('%2F'=>'/','%3A'=>':','%3F'=>'?','%3D'=>'=','%26'=>'&','%27'=>"'",'%22'=>'"','%3E'=>'>','%3C'=>'<','%23'=>'#','&'=>'&'))); $sitemapTXT=trim(strtr($sitemapTXT,array('%2F'=>'/','%3A'=>':','%3F'=>'?','%3D'=>'=','%26'=>'&','%27'=>"'",'%22'=>'"','%3E'=>'>','%3C'=>'<','%23'=>'#','&'=>'&'))); //Запись в файл //$fp=fopen($engine_root.'sitemap.txt','w+');if(!fwrite($fp,$sitemapTXT)){echo 'Ошибка записи!';}fclose($fp); //$fp=fopen($engine_root.'sitemap.xml','w+');if(!fwrite($fp,$sitemapXML)){echo 'Ошибка записи!';}fclose($fp); echo $sitemapXML; ?>