Полюбите код! И он полюбит Вас!

Последние комментарии:

Марат : Для этого и делали! Рад, что помог! Приходите ещё! далее

2018-02-16 20:31:51



Виктор : Спасибо! Очень полезная статья. Нужно было очистить всю базу данных, далее

2018-02-16 20:30:13



Евгений : Спасибо за перевод sublime!!!! далее

2018-02-15 16:42:05



Марат : Вообще, после написания статьи - у них вышло обновление, может далее

2018-02-13 19:19:01



Сергей : Доброе время суток!После правки кода, капчи вообще нет! Ни старой, далее

2018-02-13 19:10:15



Это интересно:

Рейтинги страниц.

Вы здесь - Главная - PHP

Поиск по сайту php

Поиск по сайту, поиск по файлам и вообще будем искать на сайте. Давно хотел сделать такую тему, как поиски внутри сайта, внутри файлов. В общем разобраться в теме поиска.

В самом начале давайте разберемся, где будем искать. Мы будем искать в файлах, но в принципе второй вариант, может подойти и как поиск по базе данных.

Но давайте все по порядку.

И сделаем маленькую навигацию по странице…

Поиск №1 можно использовать, как и поиск по базе mysql перебирая строки таблицы не в файлах, а в базе данных.

1.

Поиск по заголовкам

Один из самых простых способов поиска это поиск по заголовкам. Я вообще придерживаюсь такой точки зрения, что на вашем сайте должна быть такая страница, где есть все ссылки вашего сайта! Почему это нужно!? Почему это важно!? Ну, во-первых, в любом случае карта сайта должна существовать! А во втором, если у вас есть карта сайта - sitemap.html , то спокойно можно делать свою карту сайта XML.

Итак! У нас есть страница, на которой есть все ссылки с нашего сайта!

Алгоритм поиска по заголовкам

Нужно получить данные с карты сайта:

$file = file ("http://dwweb.ru/sitemap.html");

У нас получился массив, теперь нам нужно удалить все ненужные ячейки массива.

Это примерно до 285 ячейки у нас будет навигация по карте сайта

… она будет только мешать и там нет наружных ссылок, поэтому вообще глупо по этой навигации искать…

array_splice($file, 0, 285);

Создадим цикл, где будем перебирать строки…

for ($i = 0; $i  < count($file); $i++) {  

  $line = $file[$i];

  // если строка начинается с "$poisk", то заносим её в массив 

  if (strpos($line, $poisk) !== false) {

$line_count += 1;

  echo  $line ; 

  }  

}

Где $poisk – строка поиска.

Далее приравняем каждую ячейку к переменной

$line = $file[$i];

Считаем количество совпадений…

$line_count += 1;

Ну и далее

  if (empty($line_count)) 

  {

  echo "Простите, поиcк ничего не дал!<br>

  Попробуйте ввести часть интересующего слова<br>

  Попробуйте изменить строку поиска! "; 

  } 

  else { echo 'Всего найдено совпадений: ' . $line_count; }

Ну и для того, чтобы исключить непонимание заглавных букв в поиске и в строках добавим соответствующие строки…

$poisk = mb_strtolower( $poisk, "UTF-8");

И

$line = mb_strtolower( $line, "UTF-8");

Смотрим, тестирем, что у нас получилось

Смотрим на код:

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>Поиск по сайту</title>

</head>

<body>

Поиск по сайту

<form method="POST" action="">

  <input type="text" name="poisk">

  <input type="submit" name="button" value="ОТПРАВИТЬ">

</form>  

<?

If(isset($_POST['poisk'])){$poisk = $_POST['poisk'];} 

$poisk = mb_strtolower( $poisk, 'UTF-8'); 

$file = file ('http://dwweb.ru/sitemap.html'); //прочитали весь файл в переменную

array_splice($file, 0, 285);

If(isset($_POST['button']))

{

for ($i = 0; $i  < count($file); $i++) {  //count($file)

  $line = $file[$i];

  $line = mb_strtolower( $line, 'UTF-8'); 

  if (strpos($line, $poisk) !== false) {

  $line_count += 1;

  echo  $line ; 

  }  

}

  if (empty($line_count)) 

  {

  echo "Простите, поиск ничего не дал!<br>

  Попробуйте  ввести часть интересующего слова<br>

  Попробуйте  изменить строку поиска! "; 

  } 

  else { echo 'Всего найдено совпадений: ' . $line_count; }

}

?>  

</body>

</html>  

2.

Поиск по файлам

И второй поиск – это поиск по файлам во всем сайте!

Я не буду вам разжевывать каждую строчку, а лишь расскажу алгоритм.

Получаем все ссылки, а у нас все ссылки нашего сайта есть в карте сайта XML.

Кстати можно посмотреть генератор XML карты

Очищаем от всех тегов(preg_match_all), которые присутствуют в карте XML.

array_shift - удаляем первую ячейку - ссылка на главную, она нам не нужна, потмоу, что на ней дублруется часть заголовков, которые уже есть в карте сайта.

Далее удаляем домен во всех ссылках($ALL_pages = preg_replace($patterns, $replacements, $url[1]);).Для чего это делается!?

Мы будем использовать функцию file_get_contents для получения данных со страницы, а у неё есть некоторые нюансы.

1.

Если вы используете относительный путь до страницы http://dwweb.ru/название_страницы.html, то функция вернет полностью загруженную страницу с исполненными скриптами – а это-то, как раз нам и не нужно! Страница – тупо зависнет и попытается получить данные с 300 страниц(на момент написания статьи)… и будет висеть бесконечно!

2.

Если использовать абсолютный путь до файла

$_SERVER[“DOCUMENT_ROOT”] + путь до файла. То мы получим исходный код страницы, а у нас , кроме текста там ничего и нет, что собственно нам и нужно! Это будет загружаться намного быстрее!

Все данные привели к нижнему регистру(mb_strtolower) и поиск и линию. Далее делаем цикл, перебираем наш массив($ALL_pages) на совпадения(strpos). Считаем строки, если цикл прошел один раз прибавляем единицу($line_count), потом её выведем как количество совпадений.

Ну и далее делаем вывод и результатов поиска и сколько строк…

Смотрим собранный код, скопировать в самом низу...

Тестирем, что у нас получилось

<?php

$ALL_pages = file_get_contents('http://dwweb.ru/sitemap.xml');  

preg_match_all("#<loc>(.+?)</loc>#i", $ALL_pages, $url);

//УДАЛЕМ ПЕРВУЮ ЯЧЕКУ СО ЗНАЧЕНИЕМ dwweb.ru

$fruit = array_shift($url[1]);

$patterns1 = "http:\/\/dwweb.ru\/";// что меняем 

$patterns = "/$patterns1/";// что меняем 

$replacements = '/';//На что менняем 

$ALL_pages = preg_replace($patterns, $replacements, $url[1]); //пропускаем через функцияю замены 

 //print_r($ALL_pages);

$home = $_SERVER['DOCUMENT_ROOT'];

If(isset($_POST['poisk'])){ $poisk = $_POST['poisk'];}

$poisk = mb_strtolower( $poisk, 'UTF-8'); 

If(isset($_POST['button']))

{

 for ($i = 0; $i  < count($ALL_pages); $i++) 

 { 

 $new =  file_get_contents($home.$ALL_pages[$i]);  

 $new = mb_strtolower( $new, 'UTF-8');  

   if (strpos($new, $poisk) !== false) 

 {   $line_count += 1;

   

   $parts = explode('::', $line);

   echo  '<a href ="'.$ALL_pages[$i].'" target="_blank">'.$ALL_pages[$i].'</a><br>' ;

   }  }

if(!empty($line_count)){ $vivod_info = 'Всего найдено совпадений по запросу <strong>"'.$poisk.'"</strong> - ' . $line_count; } else { $vivod_info = 'Ничего не найдено...<br>Попробуйте изменить строку поиска.<br>Либо изменить посиковое слово';} 

}

 

?>

<? echo $vivod_info ?>

<form method="POST" action="">

  <input type="text" name="poisk" >

  <input type="submit" name="button" value="ИСКАТЬ"><br>

</form></div>

3.

Поиск по файлам №2

Поиск по файлам №2 аналогичен "Поиск по файлам №1", с той только разницей, что выводятся названия страницы, а не ссылки.

Как это работает!?

На сайте есть файл, куда складываются некоторые данные для формирования главной http://marrex.ru/, там есть ссылки и названия страниц и нам остается только в цикле выводить части строки. И аналогичным путем ползучем все данные со всех страниц.

Не буду вдаваться во все подробности такого поиска и + совместил поиск по заголовкам и во всех файлах в один и вот, что у нас получилось.

Если интересен код - пишите в комментариях, расскажу и о нём.

Скопировать коды здесь.

Понравилась статья!? Не стесняйся – поделись ссылкой!

И!

Пожалуйста! Если вам не трудно - прокомментируйте то, что вы прочитали! Вам понравилось, или не понравилось! Напишите, какие мысли возникли у вас, и это бесплатно для вас, но очень ценно для нас!!! Всё, что вы здесь видите - это написано для вас! Никаким другим образом мы не можем понять вашу реакцию. Может, что-то стоит добавить или наоборот убрать. Либо, что-то стоило изменить...

P.S.

25 октября 2017

Мы запустили подписку на новости по емайлу, как только выходит новая статья, то будет отправлено сообщение на почту, что вышла новая статья!

Почему стоит подписаться на наши новости!?

Расскажу историю, вчера искал ответ на один из вопросов (конечно, я могу и сам написать, но чаще всего, вначале, ищу в интернете, может есть готовое решение…) и было множество вариантов, которые были описаны, но ни одного, с примерами! И мало того, что они предлагают решения, которые непонятно как реализовывать, особенно новичкам, у которых больше вопросов, чем ответов. Так они еще и не работают!

У нас же, на сайте – только рабочие проверенные скрипты! Полностью с описанием и с примерами! И реализовать может человек с нулевыми знаниями!

Мы есть здесь:

Проголосовать за статью!
  С 24 сентября мы запускаем новый скрипт в тестовом режиме (только свои скрипты)
  Вы можете проголосовать за понравившуюся статью.

  Еще никто не проголосовал
    


Просмотров 905

Друзья!

Для того, чтобы вы получили бесплатную информацию, мы потратили и время и деньги!

Мы существуем от кликов по рекламе!

Если вы не нашли подходящего блока объявлений, то вы еще можете помочь проекту!

Не стесняйтесь!

Даже самая маленькая сумма будет употреблена на продвижение и улучшение проекта!

Заранее благодарим Вас!

Оставить комментарий:

Для отображения аватара после отправки сообщения, необходимо быть зарегистрированным в Граватаре.



Комментарии

Комментариев пока нет.

* Обязательные поля
(Не публикуется)
 
Жирный Курсив Подчеркнутый Перечеркнутый Степень Индекс Код PHP Код Кавычки Вставить линию Вставить маркированный список Вставить нумерованный список Вставить ссылку Вставить e-mail Вставить изображение Вставить видео
 
Улыбка Печаль Удивление Смех Злость Язык Возмущение Ухмылка Подмигнуть Испуг Круто Скука Смущение Несерьёзно Шокирован
 
5000
Какое слово выделено жирным шрифтом?
 
(введите ответ)
 
Уведомлять о новых коментариях по почте.
 

Оставить комментарии через вконтакте

Все дела сделаны!

Теперь можно и поиграть!

Понравилась игра!? Растфнуть на весь экран

Улучши поведенческий фактор на своём сайте.

Забери код здесь

Пишем полную инструкцию о пользовании ruweb.net + DirectAdmin

RuWeb.net - гибкий хостинг
Индекс цитирования