Nochmals moin, moin!
Wenn Du CGI nutzen kannst, wird wohl auch SSI funktionieren. Bei meiner Lösung müßtest Du in eine Seite etwas einbauen wie
Letztes Update: <!--#include virtual="/cgi-bin/update.pl"-->
Und so sähe das Skript /cgi-bin/update.pl aus:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
benötigte Module einbinden
use File::stat;
use Time::localtime;
oberstes zu berücksichtigendes Verzeichnis benennen ("..", wenn dieses Skript in /cgi-bin liegt)
@startverzeichnis = "..";
Variable für die neueste Zeitangabe
$maxtimestamp = 0;
#Dateien und Verzeichnisse, die fuer das Aenderungsdatum nicht beruecksichtigt werden sollen
@ignorieren = (
"cgi-bin/counter.pl",
".log"
);
for ($ignoriername=0; $ignoriername<=$#ignorieren; $ignoriername++)
{ $ignorierstring .= uc($ignorieren[$ignoriername])."|"; }
$ignorierstring = substr($ignorierstring, 0, length($ignorierstring)-1);
$ignorierstring =~ s///\//ig;
$ignorierstring =~ s/./\./ig;
Alle Dateien in allen Verzeichnisse durchgehen
while ($startverzeichnis[$i])
{
@direct = ();
@direct = &Getdir($startverzeichnis[$i]);
if (@direct)
{
foreach $datei (@direct)
{
$vollname = $startverzeichnis[$i]."/".$datei;
if ((-r $vollname) && (not (-d $vollname)) && (not (-l $vollname)))
{ # wenn es sich um eine Datei handelt
# Timestamp lesen
$filetime = stat($vollname)->mtime;
# Timestamp speichern, wenn die Datei nicht ignoriert werden soll und es der bisher höchste ist
if ($filetime > $maxtimestamp && !($vollname =~ /$ignorierstring/i)) {$maxtimestamp = $filetime}
}
if ((-d $vollname) && (not (-l $vollname)) && ($datei !~ /^./) && (-x $vollname))
{ # wenn es sich um ein Unterverzeichnis handelt, muß es ebenfalls betrachtet werden
push(@startverzeichnis,$vollname);
}
}
}
$i++;
}
Timestamp in Zeitpunkt-Angabe umwandeln
$date_string = ctime($maxtimestamp);
Monatbezeichnungen durch numerische Werte ersetzen
$date_string =~ s/Jan/01/;
$date_string =~ s/Feb/02/;
$date_string =~ s/Mar/03/;
$date_string =~ s/Apr/04/;
$date_string =~ s/May/05/;
$date_string =~ s/Jun/06/;
$date_string =~ s/Jul/07/;
$date_string =~ s/Aug/08/;
$date_string =~ s/Sep/09/;
$date_string =~ s/Oct/10/;
$date_string =~ s/Nov/11/;
$date_string =~ s/Dec/12/;
Zeitpunkt-Angabe in Bestandteile aufsplitten
@Zeit = split(/ +/,$date_string);
Tagesdatum stets 2-stellig
if ($Zeit[2] < 10) { print "0"; }
relevante Bestandteile und trennende Punkte ausgeben
print "$Zeit[2].$Zeit[1].$Zeit[4]";
Unterverzeichnis bearbeiten
sub Getdir
{
my ($verzeichnissname) = $_[0];
my @dirent ="";
if (-d $verzeichnissname)
{
if (not (-r $verzeichnissname)) { return ""; } # Verzeichnis nicht lesbar
if (-l $verzeichnissname) { return ""; } # keinen Links folgen
opendir(DH,$verzeichnissname);
@dirent = sort grep(!/^./, readdir(DH));
closedir DH;
return @dirent;
}
else { return ""; }
}
Alles klar?
Norbert