Просмотр файла search/search.php

Размер файла: 9.76Kb
<?php
  setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
  //Забираем расширения и каталоги
  $file_type_file=file("admin/conf/type_file.txt");
  $expl_type=explode(" ",$file_type_file[0]);
  //Схема
  $shem=file("admin/conf/shem/shem.txt");
  $dir_scan=array();
  $file_scan=array();

   //Проверяем схему
    if($shem[0]==1)
       {
       	 //Используется список запрещённых файлов и каталогов
         $dir_scan=file("admin/conf/shem/dirn.txt");
         $file_scan=file("admin/conf/shem/filen.txt");
       }
    else
       {
       	 $dir_scan=file("admin/conf/shem/diry.txt");
         $file_scan=file("admin/conf/shem/filey.txt");
       }
    $n=0;


   foreach($dir_scan as $line)
     {
       $line=trim($line);
       $line="./".$line;
       $dir_scan[$n]=$line;
       $n++;
     }
   $n=0;
   foreach($file_scan as $line)
     {
       $line=trim($line);
       $line="./".$line;
       $file_scan[$n]=$line;
       $n++;
     }



  $count_query_res=0;
  //Начало функции=========================================================================
  function scan_dir($dirname)
  {
    global $f1,$quit,$count_bak,$title,$expl_type,$shem,$dir_scan,$file_scan,$count_query_res;
    $dir_scan_true=false;

   //Проверяем на запрещённые каталоги
   //Если на запрещённые каталоги
   if($shem[0]==1)
      {
      	if(in_array($dirname,$dir_scan))$dir_scan_true=true;

      }
   else
      {
      	if(!in_array($dirname,$dir_scan))$dir_scan_true=true;

      }

   //Если список пуст
   if(count($dir_scan)==0) $dir_scan_true=false;


   if($dirname !="./search" && $dir_scan_true==false)
   {
     // Открываем текущую директорию
     $dir = opendir($dirname);

     // Читаем в цикле директорию
     while (($file = readdir($dir)) !== false)
     {
      // Проверяем не равно ли значение переменной
      // $file текущей или вышележащей директории
      if($file != "." && $file != "..")
     {

        //Проверка на файлы
       if(is_file($dirname."/".$file))
        {
          $file_scan_true=false;
          if($shem[0]==1)
          {
      	  if(in_array($dirname."/".$file,$file_scan))$file_scan_true=true;
          }
         else
          {
      	  if(!in_array($dirname."/".$file,$file_scan))$file_scan_true=true;
          }
        }

         //Если список пуст
         if(count($file_scan)==0) $file_scan_true=false;


        //если файл
        if((is_file($dirname."/".$file)) &&  $file_scan_true==false)
          {

             //Проверка расширения
             $expl=explode(".",$file);
             if(in_array($expl[count($expl)-1],$expl_type))
             {

                //поисковую строку в массив
                  if(isset($_POST['log']))
                     {
                       if($_POST['log']==1)$arr_quit=explode(" ",$quit);
                       else $arr_quit[0]=$quit;
                     }
                   else $arr_quit[0]=$quit;

               $stop=false;
               $pre_stop=false;
               $pre_stop1=false;
               $start=0;
               $search_res=false;
          	   $read=file_get_contents("$dirname/$file");

               $count=0;
          	   // Извлекаем название HTML-страницы
          	   $title="";
                $pattern = "|<title>(.*?)</title>|siU";
                   if(preg_match($pattern, $read, $title_arr))
                     {
                       $title= $title_arr[1];
                     }

                $read= preg_replace("'<style[^>]*?>.*?</style>'si", "", $read);
                $read= preg_replace("'<script[^>]*?>.*?</script>'si", "", $read);
                $read= preg_replace("'<head[^>]*?>.*?</head>'si", "", $read);
                $read= preg_replace("|<meta[^>]+>|si", "", $read);
                $read_bak=$read;
                $read= strip_tags($read);
                $read= preg_replace( "'&(nbsp|#160);'i", " ", $read);
                $read= preg_replace( "'([\r\n])[\s]+'", " ", $read);



                 $search_res=false;
                //==========================================================
                 //Критерии поиска==========================================
                 //Если не задействован подробный поиск, ищем полную фразу как есть в любых сочетаниях

                 foreach($arr_quit as $line)
                   {
                       if(isset($_POST['toch'])) $pattern="/\b".$line."\b/";
                       else $pattern="/$line/";
                       if(!isset($_POST['registr']))$pattern.="i";

                      $count+=preg_match_all($pattern,$read,$arr);

                   }


                //=========================================================

               if($count)
               {
                $count_query_res++;
                $read_bak= strip_tags($read_bak,"<br><p><font><b><i><u><pre><table><td><tr><h1><h2><h3><h4><h5>");
                $read_bak= preg_replace( "'&(nbsp|#160);'i", " ", $read_bak);
                $read_bak= preg_replace( "'([\r\n])[\s]+'", " ", $read_bak);
                //Выделение в тексте========================================
                foreach($arr_quit as $line)
                 {
                   if(strpos($read_bak,$line)===false) $line=strtolower($line);
                   if(strpos($read_bak,$line)===false) $line=ucfirst($line);
                   if(strpos($read_bak,$line)===false) $line=ucwords($line);
                   if(strpos($read_bak,$line)===false) $line=strtoupper($line);
                   $read_bak=  str_replace($line,"<span id=select>$line</span>", $read_bak);
                 }

                  $count_bak++;
                  $f=fopen("search/bak/".$count_bak.".html","w+");
                  fwrite($f,"<html><head><title>Текстовая копия по запросу :: $quit</title>
                               <style>
 	                              #select
 	                                {
                                     font-weight:700;
                                     color:#ffffff;
                                     background-color:#0080C0;
                                     }
                               </style>
                               </head>
                               <body>
                               $read_bak
                               </body></html>");

                  fclose($f);
                  //Выделяем текст================================================
                  foreach($arr_quit as $line)
                   {
                       //Перебераем варианты запроса

                       if(strpos($read,$line)===false) $line=strtolower($line);
                       if(strpos($read,$line)===false) $line=ucfirst($line);
                       if(strpos($read,$line)===false) $line=ucwords($line);
                       if(strpos($read,$line)===false) $line=strtoupper($line);
                        $word_pos= strpos($read,$line);
                        if($word_pos!==false) break;
                   }


                    $to_word = substr($read, 0, $word_pos);
                    $start = strrpos($to_word, ".");
                    if ($start != 0) $start++; else $start=0;
                    $to_stop = substr($read, $word_pos);

                    $stop = strpos($to_stop, ".") + 1 + $word_pos;
                    if(strpos($read,".",$word_pos)===false)$stop=strlen($read)+1;
                    $read=substr($read,$start,(++$stop-$start));

                   //======================================================================

                   $link=substr_replace($dirname,"",0,2);
                   if($title=="") $title="Документ без названия";

                    if($link!="")
                       $link1="<a href=http://$_SERVER[SERVER_NAME]/$link/$file target=_blank>$title</a>";
                    else
                       $link1="<a href=http://$_SERVER[SERVER_NAME]/$file target=_blank>$title</a>";

                     fwrite($f1,"$link1*$read*$count\r\n");

               }
             }

       }

      // Если перед нами директория, вызываем рекурсивно
      // функцию scan_dir
      if(is_dir($dirname."/".$file))
         {
           scan_dir($dirname."/".$file);
         }
     }

   }
    // Закрываем директорию
    closedir($dir);
   }



 }


//Конец функции=====================================================================
if(isset($_POST['quit']) && $_POST['quit']!="")
 {
  $f1=fopen("res.txt","w+");
  $d = opendir("bak");

    while(($e=readdir($d))!=false)
    {

      if($e != "." && $e != "..") unlink("bak/$e");

    }
   closedir($d);

   $r=fopen("quit","w+");
   fwrite($r,$_POST['quit']."*".$_SERVER['REMOTE_ADDR']);
   fclose($r);

   $j=fopen("admin/conf/jurnal.txt","a");
   chdir("..");
   $title=array();
   // Имя директории
   $dirname = ".";
   $quit=$_POST['quit'];
   $quit=trim($quit);
   scan_dir($dirname);
   fclose($f1);

   //Для журнала
   $jurnal=date("d.m.y H:i")."*".$_POST['quit'];
   if(isset($_POST['toch']))$jurnal.="* точное совпадение";
   else $jurnal.="* любое сочетание";

   if(isset($_POST['registr']))$jurnal.="* учитывать регистр";
   else $jurnal.="* не учитывать регистр";

   if(isset($_POST['log']))
      {
         if($_POST['log']==1) $jurnal.="* любое слово";
         if($_POST['log']==2) $jurnal.="* фраза целиком";
      }
   else $jurnal.="* фраза целиком";
   $jurnal.="*найдено документов $count_query_res\r\n";

   fwrite($j,$jurnal);
   fclose($j);
  echo "<meta http-equiv='refresh' content='0; url=res.php?s=1'>";
 }
else
 {
      $r=fopen("quit","w+");
      fwrite($r,"*");
      fclose($r);
 	echo "<meta http-equiv='refresh' content='0; url=res.php'>";

 }
?>