Търсене на файл в множество директории

DownFall

Registered
Здравейте,

Моля да ми предложите начин, по който да мога да открия даден файл в коя директория се намира. Трябва ми най-бързият и ресурсо-спестяващ начин. Директориите са около 90,000 с по 1 до 16 файла в тях.

Предпочитам операцията да е с PHP или посредством exec(); функцията, но и на друг език да е няма проблем, стига резултата да е задоволяващ.

Благодаря предварително.
 
Предполагам Linux
Код:
find /dire/kto/riq -name "index.php"

Ако ти се налага един път да търсиш или рядко това горе става. Ако ще ти се налага много да търсиш файлове най-добре си ги индексирай в базата от данни и търси в нея. С един индекс ще търси хиляди пъти по-бързо вместо да обръщаш наопаки файловата система за да намериш нещо.
 
Linux, да. Така търся чрез SSH, когато ми се наложи, но е прекалено тромав начин, за да го използвам в уеб система. Колко често ще се търси е прекалено относително.. Може да се наложи да се търси веднъж на 2 седмици, може и да е 20 пъти за 1 час.. Няма вариант да запазвам структурата в SQL. Опитвам се да интегрирам web приложения с външен software, който по този начин съхранява данните си..
 
DownFall каза:
Linux, да. Така търся чрез SSH, когато ми се наложи, но е прекалено тромав начин, за да го използвам в уеб система. Колко често ще се търси е прекалено относително.. Може да се наложи да се търси веднъж на 2 седмици, може и да е 20 пъти за 1 час.. Няма вариант да запазвам структурата в SQL. Опитвам се да интегрирам web приложения с външен software, който по този начин съхранява данните си..

Разгледай
http://linux.die.net/man/1/locate
и
http://linux.die.net/man/8/updatedb

Това реално индексира файловете за да можеш да търсиш по-бързо. Второто индексира, първото търси. Индексера можеш да го пуснеш примерно веднъж на 1 час и така ще ти е винаги up-to-date индекса.

Можеш да си направиш и нещо подобно с php и mysql (1 cron script, който сравнява датите на файловете и добавя в БД ако ги няма) ама се съмнявам да е толкова бързо при индексирането.
 
Това значително ускори процеса, мисля че ще ми свърши работа. Това, което в момента не мога да проумя е, защо exec(); функцията не ми връща резултат.. През SSH изпълнявам командата, всичко е точно. Опитвам през PHP с exec, shell_exec и system - ефект нулев. Опитвам примерно shell_exec('whoami'); - работи. Идей?
 
DownFall каза:
Това значително ускори процеса, мисля че ще ми свърши работа. Това, което в момента не мога да проумя е, защо exec(); функцията не ми връща резултат.. През SSH изпълнявам командата, всичко е точно. Опитвам през PHP с exec, shell_exec и system - ефект нулев. Опитвам примерно shell_exec('whoami'); - работи. Идей?

Ползваш втория параметър на exec, нали?

$data = array();
exec('command', $data);

print_r($data);
 
PHP:
<?php
$b = array();
$a = exec('locate -d /home/pvpgn/classic.db achilles', $b);
print_r($b);
?>

Празен резултат :)

През SSH:

Код:
icn:~# locate -d /home/pvpgn/classic.db achilles
/home/pvpgn/classic/var/charinfo/nightwing/achilles
/home/pvpgn/classic/var/charinfo/noissia_/achillessss
icn:~#
 

Back
Горе