Sabine: Problem mit ftp_get

Hallo allerseits!

Ich habe folgendes Problem: Ich erzeuge in einem geschützten Bereich dynamisch eine Datei, die dann sofort downgeloadet werden kann. Dazu benötige ich nun ftp_get, da die Datei nicht im Browser geöffnet werden soll. Habe schon einiges dazu im Forum gelesen, dass der IE das nicht immer mag, ich möchte es aber trotzdem gerne versuchen.

Nun mein ftp-Skript sieht so aus:
<?php
$port=21;
$server="server.com";
$conn=ftp_connect($server,$port);
if(!$conn) die ("Verbindungsaufbau gescheitert.");
echo ("Verbindung: Ok<br>");
$log = ftp_login($conn, $user, $pass);
if(!$log) die ("Login gescheitert.");
echo ("Login: Ok<br>");
$change=ftp_chdir($conn, /verzeichnis1/verzeichnis2");
if(!$change) die ("Verzeichniswechsel scheitert.");
echo ("Verzeichnis: Ok<br>");
$trans = ftp_get($conn,"$local","$ftp",FTP_BINARY);
if(!$trans) die ("Download der Datei $ftp nach $local war fehlerhaft");
echo ("Download Ok<br>");
ftp_quit($conn);
?>

Das Problem dabei: Der Download funktioniert nicht. Heißt der Verzeichniswechsel funktioniert, dann aber läuft etwas schief. Ich nehme fast an, dass wahrscheinlich die gewünschte Datei nicht die richtigen Zugriffsrechte hat. Da ich sie ja zuvor dynamisch erzeugt habe.
Hier wird wohl der Befehl ftp_site ins Spiel kommen, oder? Wie ist denn hier die korrekte Syntax? ftp_site($conn, string cmd) - Was kann ich als String cmd eingeben? Reicht hier der Dateiname wenn ich im gewünschten Verzeichnis bin?

Zugriffsrechte sehen zur Zeit folgendermaßen aus:
 - -rwxr-xr-x 1
Ich kann mir auch mit ftp_rawlist die Infos des Verzeichnisses ausgeben lassen, nur der Download klappt nicht.

Oder liegt es vielleicht an der lokalen Datei? Diese muss ja vorher nicht existieren bei ftp_get, oder? Muss (darf) ich hier nur den Dateinamen angeben oder den gesamten Pfad? Und wenn Pfad - wie? c:\datei.xyz?

Danke im Voraus für Tipps und Anregungen wie ich das Problem in den Griff bekommen könnte!

lg
Sabine

  1. Hallo Sabine,

    je nachdem, wie Deien ftp-Config-Datei aussiehtt, hat der User nach dem FTP-Login normalerweise ein eigenes Virtual Root. Man kann nun je nach Rechten des Nutzers un der Hierarchie aus dem eigenen Root-Verzeichnis ausbrechen oder nicht. Kommt auf Deinen FTP-Server an.

    Du solltest die Datei also mal testhalber im Home-Dir des Users anlegen lassen und ihm anschließend die Datei mit chgrp (Hast Du ein LAMP-System?) die Datei zugänglich machen. Mit chmod auch gleich die Rechte richtig stellen (760 z.B.). chown ist root vorbehalten. Weißt Du ja....

    Der wwwrun benötigt dann aber Schreibrechrte in dem entsprechenden User-Verzeichnis.

    Ich habe das bei mir so geregelt, dass der wwwrunn in /home/<user>/output schreiben darf (aber nicht lesen).

    Danach sollte es funxen

    Gruß Tom

    1. Hallo Sabine,

      je nachdem, wie Deien ftp-Config-Datei aussiehtt, hat der User nach dem FTP-Login normalerweise ein eigenes Virtual Root. Man kann nun je nach Rechten des Nutzers un der Hierarchie aus dem eigenen Root-Verzeichnis ausbrechen oder nicht. Kommt auf Deinen FTP-Server an.

      Ausbrechen kann ich aus dem Root-Verzeichnis - habe das Verzeichnis gewechselt und mir den Inhalt + Verzeichnisnamen anzeigen lassen, das funktioniert alles wunderbar.

      Du solltest die Datei also mal testhalber im Home-Dir des Users anlegen lassen und ihm anschließend die Datei mit chgrp (Hast Du ein LAMP-System?) die Datei zugänglich machen.

      Was heißt das LAMP-System?

      Der wwwrun benötigt dann aber Schreibrechrte in dem entsprechenden User-Verzeichnis.

      Ich habe das bei mir so geregelt, dass der wwwrunn in /home/<user>/output schreiben darf (aber nicht lesen).

      Danach sollte es funxen

      Ganz blicke ich bei den FTPs noch nicht durch. Zugriffsrechte sind mir klar, z.B. wechselt aber bei mir wenn ich über ein normales FTP-Programm down- oder uploade der Port. Ist das normal? Und muss ich das dann bei meinem FTP auch machen?

      Liebe Grüße
      Sabine

      Gruß Tom

      1. Hi!

        Du solltest die Datei also mal testhalber im Home-Dir des Users anlegen lassen und ihm anschließend die Datei mit chgrp (Hast Du ein LAMP-System?) die Datei zugänglich machen.
        Was heißt das LAMP-System?

        Linux-Apache-MySQL-PHP  >>>>>>>>>  L-A-M-P!

        Viele Grüße
        Andreas

  2. Hallo nochmals!

    Vor einigen Stunden habe ich folgendes gepostest.

    <?php
    $port=21;
    $server="server.com";
    $conn=ftp_connect($server,$port);
    if(!$conn) die ("Verbindungsaufbau gescheitert.");
    $log = ftp_login($conn, $user, $pass);
    if(!$log) die ("Login gescheitert.");
    $change=ftp_chdir($conn, "/verzeichnis1/verzeichnis2");
    if(!$change) die ("Verzeichniswechsel scheitert.");
    $trans = ftp_get($conn,"$local","$ftp",FTP_BINARY);
    if(!$trans) die ("Download der Datei $ftp nach $local war fehlerhaft");
    ftp_quit($conn);
    ?>

    Das grundlegende Problem (die Fehlermeldung, dass Download nicht klappt), ist nun gelöst.Allerdings stehe ich nun vor einem neuerlichen Problem. Die Beschreibung von ftp_get lautet ja, dass die Datei auf den lokalen Rechner gespeichert wird.
    Ich habe meine Datei aber lokal nicht gefunden. Habe nun als $local="c:\dateiname.abc"; eingegeben und meine Datei im Verzeichnis am Server in dem der Download durchgeführt wird gefunden.

    Wie ist das möglich und vor allem wie kann ich das ändern und dafür sorgen, dass die Datei wirklich downgeloadet wird?

    Danke im Voraus!
    Sabine

    1. Hallo Sabine!

      Das grundlegende Problem (die Fehlermeldung, dass Download nicht klappt), ist nun gelöst.Allerdings stehe ich nun vor einem neuerlichen Problem. Die Beschreibung von ftp_get lautet ja, dass die Datei auf den lokalen Rechner gespeichert wird.
      Ich habe meine Datei aber lokal nicht gefunden. Habe nun als $local="c:\dateiname.abc"; eingegeben und meine Datei im Verzeichnis am Server in dem der Download durchgeführt wird gefunden.

      Dir ist klar, das du per ftp_get() eine Datei von einem fremden FTP Server auf den Rechner, auf dem Du ftp_get() ausführst runterlädst? Du könntest höchsten lokal einne FTP-Server installieren und dann anders herum, also "hochladen". Dann würde es auf deinen PC "runtergeladen"!
      Ich hatte ein ähnliches Problem hier kürzlich diskutiert:[link:http://forum.de.selfhtml.org/archiv/2002/5/12215/#m676279

      Viele Grüße
      Andreas

      1. Hallo!
        Ich hoffe ich habe das nicht falsch verstanden. Jedenfalls sah meine Lösung am Ende so aus:

        system ("htmldoc --webpage --jpeg=50 -f $pdf_output $temp_html");

        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename="expose_ID".$ID.".pdf"");

        readfile($pdf_output);

        Viele Grüße
        Andereas

      2. Hallo Andreas!

        Dir ist klar, das du per ftp_get() eine Datei von einem fremden FTP Server auf den Rechner, auf dem Du ftp_get() ausführst runterlädst? Du könntest höchsten lokal einne FTP-Server installieren und dann anders herum, also "hochladen". Dann würde es auf deinen PC "runtergeladen"!

        Tja, bis vor kurzem war mir das nicht klar. Ich dacht lokal meint meinen Rechner vor mir :(, mittlerweile ist es klar geworden und ich habe es nun auf ein ähnliches System gelöst wie du es in deinem 2. Posting andeutest.

        Ich hatte ein ähnliches Problem hier kürzlich diskutiert:[link:http://forum.de.selfhtml.org/archiv/2002/5/12215/#m676279

        Sorry, das habe ich wohl übersehen bei meiner Suche.

        Liebe Grüße
        Sabine

        Viele Grüße
        Andreas

  3. Hallo Sabine,

    Ich habe folgendes Problem: Ich erzeuge in einem
    geschützten Bereich

    geschützt wogegen? HTTP-Authentication?
    (Falls ja, wieso dann überhaupt im URL-Baum?)

    dynamisch eine Datei, die dann sofort downgeloadet
    werden kann.

    "kann" oder "wird"?
    Soll diese Datei nach dem Vorgang des Herunterladens
    weiter existieren?
    (Wenn nein, wieso wird überhaupt eine Datei erzeugt?)

    Dazu benötige ich nun ftp_get, da die Datei nicht
    im Browser geöffnet werden soll.

    Das ist mir nun vollends unverständlich.
    Was spricht gegen eine Übertragung via HTTP mit einem
    passenden MIME-Typ?

    Mir ist auch nicht klar, wie Dein Server eine FTP-
    Verbindung zu einem Client-Rechner aufbauen _können_
    soll.
    Bei FTP - wie bei HTTP - ist meines Wissens immer der
    Client (dieses Protokolls!) derjenige, der die Initia-
    tive hat - das bedeutet, daß auf dem Partnerrechner
    (wo der Browser läuft) ein FTP-Server (!) installiert
    sein müßte - was ich mir im allgemeinen Fall überhaupt
    nicht vorstellen könnte ... (ein Browser ist nur ein
    FTP-Client, wenn überhaupt)

    Viele Grüße
          Michael