day & night

листинг, Поиск скриптов
Дата обновления: , перейти к новому сообщению
#1
chupakabra



Unregistered














Ищу скрипт листинга дииректорий с возможностью поиска
Но поиск должен происходить по базе данных а не каждый раз по всем папкам (т.к. файлов порядка 20 000), ах да и поиск не должен индексировать содержимое файла, а запоминать только его месторасположение.

Кто-нгибудь может подсказать?
Go topGo end
 

Ответов(1 - 7)
25.10.2005 - 17:19
#2
Лагуна



Unregistered














функция для рекурсивной выборки, остальное можешь сам написать
CODE
function ListFile($Path,$match=".*")
{
 $FileList = false;

 if ($FileHandle = @opendir($Path))
  {
   if ($Path != "")
    {
     if (!preg_match("'^.*/|\\$'",$Path))
      {
       $Path .= "\\";
      }
    }

   while ($Name = readdir($FileHandle))
    {
     if (($Name != '.') && ($Name != '..'))
      {
       if (filetype($Path.$Name) != "file")
        {
         $buf = ListFile($Path.$Name,$match);
         if ($buf)
          {
           $FileList = array_merge($FileList,$buf);
          }
        }
       else if (preg_match("/.*\.".$match."/i",$Name))
        {
         $FileList[] = $Path.$Name;
        }
      }
    }
   closedir($FileHandle);
  }
 return $FileList;
}
Go topGo end
26.10.2005 - 13:01
#3
SpiderX



Siemensovod
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 962
Регистрация: 5.11.2004
Пользователь №: 1.716


Респектов: 26
-----X----




Рекурсивно прочитать директорию можно значительно проще:
CODE
$dir = dirname($_SERVER['SCRIPT_FILENAME']);
scan_dir($dir);

function scan_dir($dirname)
{
$handle = opendir($dirname);
while (false !== ($object = readdir($handle)))
 {
 if($object != '.' && $object != '..' && $object != basename($_SERVER['SCRIPT_FILENAME']))
  {
  if (is_file($dirname.'/'.$object))
   {
   print ('Файлик: '.$dirname.'/'.$object.'<br />');
   }
  if(is_dir($dirname.'/'.$object))
   {
   scan_dir($dirname.'/'.$object);
   print ('Директория: '.$dirname.'/'.$object.'<br />');
   }
  }
 }
closedir($handle);
}

QUOTE
Но поиск должен происходить по базе данных а не каждый раз по всем папкам (т.к. файлов порядка 20 000)

Вставляй вместо звёздочек функции по работе с БД (делаем загон данных в базу)
CODE

  if (is_file($dirname.'/'.$object))
   {
   ******
   }
  if(is_dir($dirname.'/'.$object))
   {
   ******
   }

потом пишем отдельный скрипт на выборку результатов поиска из базы. smile.gif
User is offline
Go topGo end
26.10.2005 - 15:52
#4
chupakabra



Unregistered














спасибо попробую....
Go topGo end
26.10.2005 - 17:06
#5
Лагуна



Unregistered














что то не понял, чем отличается твоя функция от моей? разве что проверкой is_file, а не filetype.
Go topGo end
27.10.2005 - 20:23
#6
SpiderX



Siemensovod
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 962
Регистрация: 5.11.2004
Пользователь №: 1.716


Респектов: 26
-----X----




to Лагуна
1. Тем, то работает сразу без доп. настроек.
2. Обладает более конструктивным синтаксисом.
3. Есть возможность отдельно распихивать по базе файлы и директории.
4. Меньше строк кода.
5. В отличии от твоего скрипта мой не загоняет сам себя в базу.

Из минусов есть глюк, что если имя скрипта совпадёт с именем файла, то файл будет проигнорирован:
CODE
if($object != '.' && $object != '..' && $object != basename($_SERVER['SCRIPT_FILENAME']))
User is offline
Go topGo end
29.10.2005 - 17:14
#7
Лагуна



Unregistered














2 SpiderX
Такое ощущение что ты обкурился.
1. Какие это настройки нужны моему скрипту?
2. Что значит конструктивный синтаксис?
3. Моя функция ничего никуда не распихивает, она составляет список файлов и директорий начина с указанного пути, причем можно указать конкретное расширение файла и возвращает массив путей, а что там с ними нужно делать это уже не моя задача, и это есть принцип модульности
4. если я уберу проверку пути и проверку раширения сомневаюсь что у меня будет больше строк
5. еще раз повторяю, это не скрипт, а функция, которая возвращает список, дальше этот список обрабатывается как угодно
Go topGo end
29.10.2005 - 17:53
#8
SpiderX



Siemensovod
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 962
Регистрация: 5.11.2004
Пользователь №: 1.716


Респектов: 26
-----X----




Прежде чем постить читай правила форума. За такие высказывания полагается понижение в статусе или сразу бан.
> 2. Что значит конструктивный синтаксис?
Это и значит smile.gif
User is offline
Go topGo end

Topic Options
Сейчас: 29.03.2024 - 18:18
Мобильная версия | Lite версия