Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: php и grep

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Есть ли смысл?
black_ru
Отправлено: 08 Июля, 2011 - 11:59:18
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Задумался, как сделать простейший поиск по текстовым файлам.
Допустим, статьи хранятся в каталоге в отдельных файлах.
Задача простая: ввели слово, получили вывод ссылок на страницы, где встретилось это слово.

Есть ли смысл сделать такой поиск с помощью php+grep ?
Или все-таки решить все это стандартными средствами php?
Буду благодарен за ссылку на обучающий мануал по созданию простого поиска.

(Отредактировано автором: 08 Июля, 2011 - 12:01:00)

 
 Top
EuGen Администратор
Отправлено: 08 Июля, 2011 - 12:09:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А лучше
http://sphinxsearch[dot]com/

grep вполне подойдет для простейшей задачи.
Средствами php - это нужно использовать скажем http://php.su/functions/?glob и http://php.su/functions/?preg_match


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 12:28:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen пишет:
А лучше
http://sphinxsearch.com/

Ух ты! Какой серьезный зверь!
EuGen я бы с удовольствием почитал хорошую статью на русском о том что это за зверь, как его ставить, где использовать, как настраивать...
Я бы даже просил бы вас написать такую статейку, вы хорошо излагаете.
Это без подколок - я на полном серьёзе.
 
 Top
EuGen Администратор
Отправлено: 08 Июля, 2011 - 12:33:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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

Несколько раз я с нуля разворачивал эту систему, впечатления наилучшие. Описать видимо и правда стоит.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 12:46:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Вообще можно бы сделать на форуме еще один раздел "статьи", ну или на самом портале их продолжать размещать, просто на портале нет возможности комментировать выложенные материалы.
 
 Top
EuGen Администратор
Отправлено: 08 Июля, 2011 - 12:47:14
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Такой раздел есть - Обсуждение статей.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 12:49:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я имел виду не одно обсуждение или одни статьи, имелась виду совокупность того и другого. Почитал... и внизу страницы коменты пошли. Удобно и привычно.
 
 Top
EuGen Администратор
Отправлено: 08 Июля, 2011 - 12:51:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Тоже есть.
Ветка уроков. В основном, все полезные статьи у нас там


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
black_ru
Отправлено: 08 Июля, 2011 - 18:08:39
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Сделал пока с помощью grep. Правда, результат поиска считывается в файл, вдобавок обрабатывается sed и затем другим вызовом с помощью cat выводится.
Наверное, не очень хорошо создавать файл для каждого поискового запроса?
Но скрипт поиска получился буквально из нескольких строк.

(Отредактировано автором: 08 Июля, 2011 - 18:12:27)

 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 18:20:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




black_ru А код увидеть можно?
 
 Top
black_ru
Отправлено: 08 Июля, 2011 - 19:56:36
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Переделал, убрал считывание в файл. Получилось вообще в несколько строчек Улыбка

не вижу особого смысла выкладывать код, смысл которого по сути упирается
в
CODE (htmlphp):
скопировать код в буфер обмена
  1. system(grep -bla-bla-bla | sed -bla-bla=bla)

(Отредактировано автором: 08 Июля, 2011 - 20:00:24)

 
 Top
black_ru
Отправлено: 09 Июля, 2011 - 06:15:17
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. grep -rw -m1  $sech baza/ | sed -e 's/baza/<a href=index.php?page=/;s/[/]//;s/.txt:/>Ссылка  <\/a>/;a</br>'


А похожую штуку можно средствами php сделать? Я так понимаю, preg_grep
нужно использовать?
И как быть, стандартный системный grep уже сканирует директорию.
А как поступить тут с поиском?
Сканировать директорию, читать файлы, свести все в массив и сравнивать c образцом?

(Отредактировано автором: 09 Июля, 2011 - 06:16:05)

 
 Top
black_ru
Отправлено: 09 Июля, 2011 - 18:55:42
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




В общем пока сделал так: при создании статьи создается файл index.dat,
в который пишется все заголовки в виде ссылки, каждая с новой строки:
(Я не вижу смысла искать все, что можно в статье, так как это сильно меняет задачу)
CODE (html):
скопировать код в буфер обмена
  1. <a href=index.php?page=1>Заголовок статьи</a>
  2. <a href=index.php?page=1>Заголовок статьи2</a>


Сам поиск:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4.  
  5. $serch=($_GET['srch']);
  6.  
  7. if (($_GET['srch']!='') && !preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$serch) &&
  8. strlen($sech) < 20)  {
  9. $command = "grep -wi  $serch index.dat";
  10. echo "<br><br><b>Результат поиска</b><br><br>";
  11. system($command);
  12. } else {
  13. echo "<br><b>Проверьте  корректность ввода данных</b>";
  14. }
  15.  
  16. ?>
  17.  

В коде запретил ввод спецсимволов и ограничил число вводимых.
Вызвал grep для поиска только целого слова - ключ -w, без учета регистра - ключ -i.
Можно, правда, выводить и без записи в файл для индексации, а искать по всей директории и подавлять вывод ключом -m1, например но так, наверное будет хуже, если будет много запросов.
Работает вроде бы, как мне нужно, но почему-то кажется, что можно еще ускорить процедуру, убрав вообще grep и сделать вывод из файла index.dat через ассоциативный массив.
Но четкой схемы, как это сделать - пока не придумал.

(Отредактировано автором: 09 Июля, 2011 - 19:13:38)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB