Сканирование файлов в веб-проекте
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Сканирование файлов в веб-проекте Expand / Collapse
Автор
Сообщение
05.02.2005 21:51
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 21.02.2005 13:26
Сообщ.: 24, Visits: 265
На апаче у меня запущен виртуальный каталог , физически он прикручен к каталогу "/Apache/MyProjects/".
В нем в подкаталоге /Apache/MyProjects/html/ лежат статические html-ки .
Из под апача я пытаюсь запустить скрипт , который бы просканировал эти html-ки , но он чего-то не работает .
Вообще для команды ls вроде как нужен абсолютный путь , но мне кажется , что это как-то
неверно , нужно бы как-то относительно корня виртуальной директории ...
sub Get_Files {
print "Get_Files start ";
$basedir = '/Apache/MyProjects/html/';
chdir($basedir);
foreach $file (@files) {
$ls = `ls $file`;
@ls = split(/\s+/,$ls);
foreach $temp_file (@ls) {
if (-d $file)
{
$filename = "$file$temp_file";
if (-T $filename) {
push(@FILES,$filename);
print "$filename"
}
}
elsif (-T $temp_file)
{
push(@FILES,$temp_file);
}
}
}
}
Сообщ. #856091
10.02.2005 22:43
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.10.2007 4:11
Сообщ.: 219, Visits: 1 804
1. А ты уверен, что массив @files уже заполнен именами поддиректорий? И что они не начинаются со '/'?
2. chdir и split - лишнее. Лучше попробуй:
@ls = `ls -c1 $basedir$file`;
foreach $temp_file (@ls) {
chomp($temp_file);
Сообщ. #856950
11.02.2005 9:17
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.07.2006 17:05
Сообщ.: 124, Visits: 1 356
НУ во-первых зачем использовать ls - я не понимаю, когдаесть встроенные функции Perl - opendir, readdir. Вот при помощи них и получай содержимое. ДЕлается это примерно так (уже в сотый раз привожу этот пример)

my $basedir="/home/user";
opendir(DIR,"$basedir") || die "$!";
my @FILES=grep(!/\.\.?$/,readdir DIR); # вырезаем имена родительского и текущего каталогов (то есть точки)
closedir(DIR);

Теперь в массиве @FILES у тебя все файлы из директории /home/user.


PerlMonks.Org.Ru.... coming soon
Сообщ. #856981
11.02.2005 15:56
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.10.2007 4:11
Сообщ.: 219, Visits: 1 804
ls часто работает быстрее, когда это под юниксом/линуксом.
Сообщ. #857063
11.02.2005 17:09
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.07.2006 17:05
Сообщ.: 124, Visits: 1 356
Возможно это справедливо для оооченнь больших каталогов. И то - возможно. Я не замерял скорости. Но рекомендуют (особенно в веб-приолжениях) обходиться без системных вызовов.

PerlMonks.Org.Ru.... coming soon
Сообщ. #857089
11.02.2005 18:39
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 21.02.2005 13:26
Сообщ.: 24, Visits: 265
Да я как бы и обошелся без системных вызовов :-)
Все получилось , спасибо
Сообщ. #857098
13.02.2005 12:27
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.07.2006 17:05
Сообщ.: 124, Visits: 1 356
$ls = `ls $file`; - вот это называется системный вызов. Если обошлись без него - это хорошо :)

PerlMonks.Org.Ru.... coming soon
Сообщ. #857208
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 8:34