www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Ergänzung

counter2.pl
#!/usr/local/bin/perl -w
# counter2.pl -- Ein DBI-basierter Webcounter mit Tie::RDBM

use strict;

use CGI qw(:standard);                       # Unser CGI.pm Modul
use CGI::Carp qw(fatalsToBrowser);           # Fehlermeldungen zum Browser
use GD;                                      # Zum Erzeugen von GIFs
use Tie::RDBM;                               # Datenbankzugriffe

# Konfigurationsdaten fuer die verwendete DBI-Datenbank
use constant DB_DSN   => 'mysql:www';        # Welche Datenbank?
use constant DB_USER  => $ENV{'user'};       # User-Login
use constant DB_PASS  => 'wwwpass';          # User-Passwort
use constant DB_TABLE => 'counter_hits';     # Tabelle mit Zaehlerdaten

# Fuer welche Seite soll der Zaehler inkrementiert werden?
my $sessionid = $ENV{'PATH_INFO'};
$sessionid =~ s!/!_!g;
my $query = new CGI;
error("Usage: Set PATH_INFO first!") if (!$sessionid);

# Wir stellen eine Verbindung zur DBI-Datenbank her.
my %counter;
tie %counter, 'Tie::RDBM', DB_DSN, { user  => DB_USER, password => DB_PASS,
                     table => DB_TABLE, create  => 1 }
    or die "Can't tie to database: $!\n";

# Hier wird der Zaehler atomar erhoeht.
my $newvalue = ++$counter{$sessionid};

output_as_gif($newvalue);
untie %counter;

sub output_as_gif {
    my $message = shift;    # Die auszugebende Nachricht
    my ($x,$y) = (length($message) * gdLargeFont->width() + 10,
          gdLargeFont->height() + 10);
    my $im = new GD::Image($x, $y);

    $im->transparent();
    $im->interlaced('true');
    $im->rectangle(0,0,$x,$y,$im->colorAllocate(0,0,0));

    $im->string(gdLargeFont,5,5,
        $message,$im->colorAllocate(255,255,255));
    my $gif = $im->gif();

    # GIF-Bild zum Browser senden:
    print
    $query->header(-type => 'image/gif', -expires => '-1d'),
    $gif;
}

sub error {
    my $message = shift;
    output_as_gif($message);
    exit 0;
}
   

[Prev] [Up] [Relevant Chapter] [Next]

[Alte Quelle]


Last modified: $Date: 2006/05/18 12:55:47 $
FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy
FreeBSD Logo