jc: ftp Download mit perl auf localen Rechner -> Wie?

Hallo,

ich bin bei meinem Perl-Problem (s. vorherige Frage) weiter gekommen und hab festgestellt, dass es so, wie ich mir das gedacht habe, nicht geht.
Ich möchte folgendes machen (Bsp!):

Perlscript: www.xyz.de/cgi-bin/test.pl (auf dem Server!)

Quelle: ftp.xyz.de/files/test.txt (auf dem Server!)

Ziel: C:\ (local bei mir!)

Wenn ich das Perlscript aufrufe soll die Datei "test.txt" vom ftp-Server auf meinen localen PC kopiert (downgeloaded) werden. username/pwd vom ftp hab ich selbstverständlich!

Jetzt die Frage:
Ist sowas überhaupt möglich? Wenn ja, wie?
Kann ich dem Browser die Datei irgendwie zum Download anbieten oder was dergleichen? Denn mit $ftp->get wird die Datei immer nach "www.xyz.de/cgi-bin" geladen.

Danke im Vorraus
cu
jc

  1. Hallo,

    guckst dir mal Net::FTP an,

    das steht alles was brauchst, und nichts was nicht brauchst.

    Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. guckst dir mal Net::FTP an,

      das steht alles was brauchst, und nichts was nicht brauchst.

      Danke, das hab ich ja schon, damit wird aber mit "get" alles auf den webserver kopiert und nicht auf meinen localen rechner...
      Oder hab ich was übersehen?
      Wo gibts eine gute Doku dazu?

      cu
      jc

      1. http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get

        hilft dir das?

        1. http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get

          PERL Kenner wissen wo steht ;-)

          Pilz Esser fragen Herrn Kilzpenner, denn der ist ein Pilz - Kenner.

          SCNR, Erwin ;-)

        2. http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get

          hilft dir das?

          Damit wird die Datei jedoch nur in das Verzeichnis des Perlscripts kopiert und nicht auf meinen localen Rechner.
          Trotzdem danke, ein wenig hilft es schon.

          cu
          jc

          1. Hallo,

            Damit wird die Datei jedoch nur in das Verzeichnis des Perlscripts kopiert und nicht auf meinen localen Rechner.

            <cite src="perldoc Net::FTP">
            get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
                Get REMOTE_FILE from the server and store locally. LOCAL_FILE may be a filename or a filehandle.....
            </cite>

            Was will Dir der letzte zitierte Satz sagen?
            Und was ist STDOUT?

            Grüße
              Klaus

            1. hi Klaus,

              vergiss'es. Der versteht das nimmer ;-)

              viele Grüße, Rolf

              Damit wird die Datei jedoch nur in das Verzeichnis des Perlscripts kopiert und nicht auf meinen localen Rechner.

              <cite src="perldoc Net::FTP">
              get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
                  Get REMOTE_FILE from the server and store locally. LOCAL_FILE may be a filename or a filehandle.....
              </cite>

              Was will Dir der letzte zitierte Satz sagen?
              Und was ist STDOUT?

              Grüße
                Klaus

              --
              SELFforum - Das Tor zur Welt!
              Theoretiker: Wie kommt das Kupfer in die Leitung?
              Praktiker: Wie kommt der Strom in die Leitung?
              1. vergiss'es. Der versteht das nimmer ;-)

                Wie darf ich das verstehen?
                Darf man hier keine Fragen stellen?

                cu
                jc

                1. Hallo,

                  vergiss'es. Der versteht das nimmer ;-)
                  Wie darf ich das verstehen?

                  Leute, bleibt friedlich.
                  @jc: Wie siehts aus? FUnktioniert es jetzt?

                  Grüße
                    Klaus

                  1. Leute, bleibt friedlich.

                    Danke, zumindest einer :)

                    @jc: Wie siehts aus? FUnktioniert es jetzt?

                    Nein, leider nicht. Ich habe es jetzt exact so gemacht, wie es auf:

                    http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get

                    angegeben ist.
                    Mit dem Resultat, das alle Dateien vom FTP-Server in das Verzeichnis des Perl-Scripts kopiert wurden, was ja meiner meinung auch der Sinn dieses Scriptes ist. Leider ist es aber nicht das, was ICH brauche.

                    Ich suche ein Script, das die Dateien vom FTP-Server auf MEINEN localen Rechner (!= Script-Rechner) kopiert/downoaded.

                    cu
                    jc

            2. <cite src="perldoc Net::FTP">
              get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
                  Get REMOTE_FILE from the server and store locally. LOCAL_FILE may be a filename or a filehandle.....
              </cite>

              Was will Dir der letzte zitierte Satz sagen?
              Und was ist STDOUT?

              Sorry falls ich mich da irre, aber alle meine bisherigen Versuche dies so zu regeln haben nicht geklappt. Wie gesagt, das Perlscript liegt nicht local auf meinem rechner sondern im Internet.
              Und wenn ich es so machen wie oben angegeben, dann wird die datei auf den rechner kopiert, der für das Script "local" ist. Und das ist eben nicht meiner. :(

              cu
              jc

              1. Hallo,

                <cite src="perldoc Net::FTP">
                get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
                    Get REMOTE_FILE from the server and store locally. LOCAL_FILE may be a filename or a filehandle.....
                </cite>

                Was will Dir der letzte zitierte Satz sagen?
                Und was ist STDOUT?
                Wie gesagt, das Perlscript liegt nicht local auf meinem rechner sondern im Internet.

                Ja, das ist mir(uns) klar.

                Und wenn ich es so machen wie oben angegeben, dann wird die datei auf den rechner kopiert, der für das Script "local" ist. Und das ist eben nicht meiner. :(

                Wie machst Du es?
                Ist Dir der Begriff 'Filehandle' klar?
                Und was ist STDOUT?
                Und überhaupt: Wie machst Du es?

                Wenn Du alle Fragen nicht eindeutig beantworten kannst, solltest Du schleunigst die Antworten dafür suchen. Code, der Dir nicht klar ist, ist genauso schlecht wie wenn Du blind Autorennen fahren würdest. Es geht i.d.R. voll daneben.

                Grüße
                  Klaus

                1. Also, erstmal danke, das ihr ein wenig Verständnis habt.
                  Ich arbeite erst seit 3 Tagen mit Perl und kenne vieles daher noch nicht.

                  <cite src="perldoc Net::FTP">
                  get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
                      Get REMOTE_FILE from the server and store locally. LOCAL_FILE may be a filename or a filehandle.....
                  </cite>

                  Jetzt wo du es ansprichst: DAS verstehe ich z.B. garnicht. Ok, REMOTE_FILE und LOCAL_FILE sind mir klar (denke ich). Aber wie sieht das in einem kompletten script aus? Was ist <cite>?

                  Wie machst Du es?

                  so: http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get
                  Ich habe mir das script genommen, und nur ein wenig angepasst.

                  Ist Dir der Begriff 'Filehandle' klar?

                  ich denke ja, ein Zeiger oder dergleichen auf eine Datei bzw. deren Position/Namen. Bitte korrigier mich, wenn ich falsch liege.

                  Und was ist STDOUT?

                  Standard Output. z.B. Browserfenster.

                  Und überhaupt: Wie machst Du es?

                  Das würde ich ja gerne von euch wissen. ICH weiß es ja nicht. Meine ursprüngliche Frage war, wie ich eine Datei, die auf einem FTP-Server liegt mit hilfe eines Perlscripts auf meinen Rechner laden kann.
                  Bei allen Beispielen die ich bisher bekommen habe (abgesehen von deinem, das leider (noch) nicht verstehe) landet die im Verzeichnis des Script und nicht bei mir :(

                  Wenn Du alle Fragen nicht eindeutig beantworten kannst, solltest Du schleunigst die Antworten dafür suchen. Code, der Dir nicht klar ist, ist genauso schlecht wie wenn Du blind Autorennen fahren würdest. Es geht i.d.R. voll daneben.

                  Das verstehe ich. Ich gebe mir ja größte Mühe. Leider ist es teilweise so, dass ich glaube es zu verstehen und daher nicht nachfrage.

                  cu
                  jc

  2. Moin!

    Ich möchte folgendes machen (Bsp!):

    Perlscript: www.xyz.de/cgi-bin/test.pl (auf dem Server!)

    Quelle: ftp.xyz.de/files/test.txt (auf dem Server!)

    Ziel: C:\ (local bei mir!)

    Wenn ich das Perlscript aufrufe soll die Datei "test.txt" vom ftp-Server auf meinen localen PC kopiert (downgeloaded) werden. username/pwd vom ftp hab ich selbstverständlich!

    Warum so kompliziert? Eigentlich jeder normale Browser kann auch FTP. Sogar inklusive Username und Passwort.

    Du rufst im Browser einfach folgende URL auf:

    ftp://username:passwort@ftp.xyz.de/files.txt

    Und speicherst das hereinkommende Ergebnis in einer Datei.

    Ganz vollkommen ohne Aufwand.

    Wenn das dein Problem nicht löst, hast du dein Vorhaben schlecht geschildert, und solltest nochmal genauer und im Detail schildern, was du eigentlich planst.

    Bedenke hierbei lediglich eines: Der Server kann keine Verbindung zu dir als Client herstellen, er kann lediglich auf eine Anfrage hin antworten. Und da du zuhause wohl keinen FTP-Server auf dem Rechner hast (was anzuraten wäre), kann er dir auch nicht einfach mal per FTP die Datei rüberschieben. Insofern sind deine Experimente mit dem FTP-Modul vielleicht ganz interessant und lehrreich, aber nicht sonderlich zielführend - jedenfalls so, wie ich die Sache sehe.

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 21205,05 Euro Spendengelder!
    1. Warum so kompliziert? Eigentlich jeder normale Browser kann auch FTP. Sogar inklusive Username und Passwort.
      Du rufst im Browser einfach folgende URL auf:
      ftp://username:passwort@ftp.xyz.de/files.txt
      Und speicherst das hereinkommende Ergebnis in einer Datei.
      Ganz vollkommen ohne Aufwand.

      Klar, ich kann ja auch direkt einen FTP-Client nehmen.

      Wenn das dein Problem nicht löst, hast du dein Vorhaben schlecht geschildert, und solltest nochmal genauer und im Detail schildern, was du eigentlich planst.

      Wie beschrieben. Ich möchte es nicht per "ftp://username:passwort@ftp.xyz.de/files.txt" und nicht mit einem FTP-Client machen, sondern mit einem Perlscript.
      Es geht mir darum, das ich eine Liste der Dateien auf dem Server angezeigt bekomme und diese dann mit einem Klick downloaden kann. Das ganze soll für jeden laien möglich und dem Design der Seite angepasst sein.

      Bedenke hierbei lediglich eines: Der Server kann keine Verbindung zu dir als Client herstellen, er kann lediglich auf eine Anfrage hin antworten. Und da du zuhause wohl keinen FTP-Server auf dem Rechner hast (was anzuraten wäre), kann er dir auch nicht einfach mal per FTP die Datei rüberschieben. Insofern sind deine Experimente mit dem FTP-Modul vielleicht ganz interessant und lehrreich, aber nicht sonderlich zielführend - jedenfalls so, wie ich die Sache sehe.

      Ja, das habe ich auch festgestellt. Muss mir wohl eine andere Lösung suchen.

      1. Moin!

        Wenn das dein Problem nicht löst, hast du dein Vorhaben schlecht geschildert, und solltest nochmal genauer und im Detail schildern, was du eigentlich planst.
        Wie beschrieben. Ich möchte es nicht per "ftp://username:passwort@ftp.xyz.de/files.txt" und nicht mit einem FTP-Client machen, sondern mit einem Perlscript.
        Es geht mir darum, das ich eine Liste der Dateien auf dem Server angezeigt bekomme und diese dann mit einem Klick downloaden kann. Das ganze soll für jeden laien möglich und dem Design der Seite angepasst sein.

        Du willst also einen FTP-Client im Browser betreiben.

        Soll man sich den Server dabei auswählen können? Denn die Frage ist, wozu du dich auf deinen eigenen Server per FTP connectest? Das geht mit direktem Dateizugriff doch viel schöner und schneller und direkter.

        Und was die Lösung deines Problems angeht:

        Dein Skript muß sich die Datei per FTP nach lokal abspeichern und dann per HTTP weiterversenden. Löschen der temporären Datei nicht vergessen.

        Da du nichts dazu schreibst, wie dein Skript aufgebaut ist, kann ich hier nur allgemein Hilfestellung geben. Eines ist wichtig: Du brauchst zwei vollkommen unterschiedliche Ausgaben, möglicherweise von zwei verschiedenen Skripten (man kann es auch in eines reinpacken und per Parameter unterscheiden, aber das macht die Sache unter Umständen ziemlich unübersichtlich.

        Ansonsten würde ich in Skriptarchiven einfach mal nach FTP-Interfaces für den Browser gucken. So eine Aufgabe ist mit Sicherheit schon mal gelöst worden.

        Ansonsten bietet dir der Webserver natürlich auch einige Möglichkeiten an. Das standardmäßige Directory-Listing läßt sich über entsprechende Direktiven in der .htaccess sehr weitgehend an das allgemeine Seitenerscheinungsbild anpassen. Siehe auch http://httpd.apache.org/docs/mod/mod_autoindex.html. Mit HeaderName und ReadmeName hast du die Möglichkeit, vor und nach der Dateiliste beliebigen Code anzufügen. Die Liste selbst besteht aus HTML, welches du mit CSS beliebig formatieren kannst (Einbindung über die Header-Datei).

        Ich kann mir außerdem immer noch nicht so ganz vorstellen, welchen Sinn deine Aktion haben soll. Warum per Skript einen Zugriff auf einen passwortgeschützen FTP-Bereich? Zugriff für alle, ohne Passwort?

        - Sven Rautenberg

        --
        Die SelfHTML-Developer sagen Dankeschön für aktuell 21205,05 Euro Spendengelder!
        1. Dein Skript muß sich die Datei per FTP nach lokal abspeichern und dann per HTTP weiterversenden. Löschen der temporären Datei nicht vergessen.

          Verstehe ich das so, das es nur wie bei dir oben beschrieben möglich ist?
          Wenn ja, dann bin ich beruhigt, ich habe es jetzt nämlich genau so gemacht.
          Ich logge mich per FTP ein, lade die Datei ins lokale Verzeichnis des Scripts und übergebe es dann per "Content-Type: application/octet-stream" an den Browser, der daraufhin einen Download startet. Danach wird die Datei wieder gelöscht.
          Ich dachte immer nur, das wäre eine von viele und zugleich umständliche Lösung. Aber da es geht, war ich damit zufrieden.
          Danke. :D

          cu
          jc

  3. Hallo jc,

    Ich möchte folgendes machen (Bsp!):
    Perlscript: www.xyz.de/cgi-bin/test.pl (auf dem Server!)
    Quelle: ftp.xyz.de/files/test.txt (auf dem Server!)
    Ziel: C:\ (local bei mir!)

    Du willst eine FTP-Verbindung zwischen A und B mittels eines Programmes aufbauen, das weder auf A noch auf B ausgeführt wird. Das geht schlicht und ergreifend nicht.

    Ich sehe eine einzige Möglichkeit:
    Daten mit get von A nach C holen, auf C zwischenlagern, Verbindung von C zu B aufbauen und mit put dorthin schieben. Ob das in deinem Fall alles so möglich ist, must du selber herausfinden. Unabhängig davon ist dies eine sehr umständliche Lösung, für die ich keinerlei praktischen Nutzen sehe. Da du offensichtlich einen Windows-PC nutzt, schaue dir mal das Programm FTP an, evtl. kannst du mit dessen Hilfe, ein paar Batch-Befehlen und dem Taskmanager erreichen, was du vorhast.

    Grüße
    Torsten

    1. Habs geschafft und es klappt.
      Dank an alle, die mir geholfen haben.

      cu
      jc