Thomas Mirke: Größe einer Datei auf einem anderen Server

Hallo Perl-Profis,

mit dem Modul File::stat bzw. mit stat oder lstat lassen sich die Eigenschaften einer Datei offenbar nur dann ermitteln, wenn diese sich auf dem gleichen Server befindet wie das Perl-Script. Ich erhalte ansonsten eine leere Liste.

Oder?

Meine Lektüre der perldoc hat mich da nicht wirklich weitergebracht.

Um zu zeigen, dass ich nicht völlig abartige Wünsche habe: File::Copy funktioniert ja immerhin auch serverübergreifend.

Oder gibts da noch einen Trick?

Mir fällt nur spontan ein, auf dem anderen Server ein Script zu installieren, dem ich den file-Namen übergebe und das dann dort stat durchführt und mir wie eine Funktion die gewünschten Eigenschaften dieses files zurückgibt.

Eine direktere Methode fände ich eigentlich eleganter.

Danke im Voraus,
Thomas

  1. hi,

    mit dem Modul File::stat bzw. mit stat oder lstat lassen sich die Eigenschaften einer Datei offenbar nur dann ermitteln, wenn diese sich auf dem gleichen Server befindet wie das Perl-Script. Ich erhalte ansonsten eine leere Liste.

    Oder?

    Versuchs mal so
    http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=9&id=1
    ...auf die Freigabe zugreifen mit File::stat

    Eine direktere Methode fände ich eigentlich eleganter.

    use Net::SSH; # Secure SHell Schnittstelle mit versch. Methoden

    Gruss, Rolf

    --
    KnowHow veröffentlichen statt Patentieren!
  2. Hallo Thomas.

    Du könntest mit Hilfe des HTTP-Headers an die gewünschten Infos kommen, denn die Größe der angeforderten Ressource in Byte steht im Feld Content-length. Das könnte man z.B. mit  LWP::UserAgent machen, indem du einen Request zum anderen Server schickst, im Erfolgsfall erhältst du einen Responseheader, den du dann auswerten könntest:

    #!/usr/bin/perl -w
    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use LWP::UserAgent;

    my $ua = LWP::UserAgent->new();
    my $request = HTTP::Request->new('GET', 'http://www.domain.tld/datei.name');
    my $response = $ua->request($request);
    print "Content-type: Text/html\n\n";
    if( $response->is_success() ) {
      my $groesse = length($response->content());
      print "Groesse: $groesse Byte";
    }
    else {
      print "Nicht erreichbar.";
    }

    Freundschaft!
    Siechfred