Norbert Kölln: Automatische Update Anzeige?

Beitrag lesen

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