Forum Webscript.Ru

Программирование => Perl => Тема начата: Tweak от 06 Августа 2002, 00:12:10

Название: Помогите со скриптом чтения директорий
Отправлено: Tweak от 06 Августа 2002, 00:12:10
Здравствуйте!

У меня к Вам есть просьба - помогите сделать один скрипт. У меня стоит форум UBB и хотелось бы сделать такой скрипт, который сканирует директории, сортирует файлы и вывод несколько новых (последне измененых) файлов (сообщений) на экран.

Есть у меня уже готовый скрипт (см. ниже), но он только сортирует файлы по дате изменения. А это есть плохо. Я, например, запускаю на форуме обновление всех файлов, и все файлы имеют одинаковую дату изменения -> скрипт просто беситься...

Если такое вообще возможно, чтобы скрипт сортировал сначала по имени (на форуме сообщения имеют формат 0000001.html, 000002.html и т.д.) а потом уже по дате. Если дата у всех одинаковая, то просто вывести, например, 3 последних созданных собщений: 000025.html, 000024.html, 000023.html + считывать что находиться между и генерировать ссылки на эти файлы.

Заранее все ОГРОМНОЕ спасибо.

А вот и сам скрипт:


#!/usr/local/bin/perl

$request=$ENV{\'REQUEST_METHOD\'};
$content=$ENV{\'CONTENT_LENGTH\'};

$cgi="/cgi-bin";
$url="/ubb/Forum8/HTML";
$dir="e:/server/host/ubb/ubb/Forum8/HTML";
$path="/forum/images";
$cdir="/cgi-bin";

$page=$input {\'page\'};
opendir (DIR,"$dir");
@mes=readdir(DIR);
$number=@mes-2;

#Ограничиваем количество записей на страницу.
if ($page eq "") {
$page=0;
}
$limit=10;
$pages=scalar ($number/$limit);
$begin=$page*$limit;
$next=$begin+$limit;
$a=$begin+1;
print "Content-type:text/html\\n\\n";
print "";

splice (@mes,0,2);

for ($i=$begin;$i<$next;$i++) {    
if (!-d "$dir/$mes[$i]" && "$mes[$i]" ne "." && "$mes[$i]" ne "..") {

foreach $mes (@mes) {
$time=(stat ("$dir/$mes"))[9];
$stat {$time}=$mes;
}
@keys=keys %stat;
@keys=sort ({$b<=>$a} @keys);

foreach $key (@keys) {
$value=$stat {$key};
push (@val,$value);
$key=localtime ($key);
push (@time,$key);
}

open (FILE,"$dir/$val[$i]");
@lines=;
close (FILE);

foreach $line (@lines) {
if ($line=~ /(.*?)<\\/title>/is) {<br />$title=$1;<br />}<br /><br />if ($line=~ /content=\\"(.*?)\\"/is) {<br />$name=$1;<br />}<br /><br />if ($line=~ /^<table(\\s*)(.*?)>$/i) {<br />$reply=$1;<br />push (@reply,$reply);<br />$char=@reply-1;<br />   }<br />}<br /><br />print <<HTML;<br /><li><a href="$url/$val[$i]">$title</a></li><br />HTML<br />splice (@reply);<br /><br />}<br />}<br />exit;<br />closedir (DIR);<br />last CASE;<br /><br /><br />if ($request eq \'GET\') {<br />$query=$ENV{\'QUERY_STRING\'};<br />}<br />else {<br />sysread(STDIN,$query,$content);<br />}<br />@pairs = split(/&/, $query);<br />foreach $pair (@pairs) {<br />($name, $value) = split(/=/, $pair);<br /><br />$input{$name} = $value;<br />}<br />exit;<br /></code> </dd> <dt class="postheader"> Название: <strong>Помогите со скриптом чтения директорий</strong><br /> Отправлено: <strong>glebushka</strong> от <strong>06 Августа 2002, 01:15:21</strong> </dt> <dd class="postbody"> Темы не дублируем. Да? </dd> </dl> <div id="footer" class="smalltext"> <span class="smalltext" style="display: inline; visibility: visible; font-family: Verdana, Arial, sans-serif;"><a href="http://forums.webscript.ru/index.php?action=credits" title="Simple Machines Forum" target="_blank" class="new_win">SMF 2.0.19</a> | <a href="http://www.simplemachines.org/about/smf/license.php" title="License" target="_blank" class="new_win">SMF © 2016</a>, <a href="http://www.simplemachines.org" title="Simple Machines" target="_blank" class="new_win">Simple Machines</a> </span> </div> </body> </html>