Steffen Richter: FTP Upload

Hallo!

Ich will einen FTP Upload via PHP machen. Aber das funktioniert nicht. Die Verbindung zum FTP Server geht. Meldet sich auch richtig an. Aber der ftp_put Befehl funktioniert nicht. Bekomm aber auch keine Fehlermeldung.

Muß ich beim remote Verzeichnis vom Root ausgehen oder von dem Verzeichnis wo ich grad bin?

Gruß
Steffen

  1. Hallo Steffen,

    ftp_put() returnt false im Falle des Misslingens. Wenn echo ftp_put(...) also kein Ergebnis bringt, dann ist das bereits eine Fehlermeldung, ansonsten wuerde da 1 stehen. Du musst zunaechst in das Zielverzeichnis wechseln und dort auch Schreibrechte haben. Spiel mal das Beispiel aus dem Handbuch fuer ftp_login() durch und erweitere es um ftp_ch_dir() und ftp_put(), dann kriegst Du auch vernuenftige Meldungen.

    <?php

    $ftp_server = "ftp.example.com";
    $ftp_user = "foo";
    $ftp_pass = "bar";

    // set up a connection or die
    $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");

    // try to login
    if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) {
       echo "Connected as $ftp_user@$ftp_server\n";
    } else {
       echo "Couldn't connect as $ftp_user\n";
    }

    ?>

    Dieter

    1. Hier ist mal das ganze Skript. Das Verzeichnis pics existiert mit allen Rechten chmod (777).

      Die Ausgabe ist unter: www.kraemer-elektronik.com/test.php

      Vielleicht hilft das weiter. Das komische ist, das ich das schonmal gemacht habe und da funktioniert das ohne Probleme.

      <html>
      <body>
      <form action="test.php" method="post" enctype="multipart/form-data">
      <input type="file" name="bild1" accept="image/*">
      <input type="submit" value="Test">
      </form>
      <?php
        include("conf.php");
        $test = $HTTP_POST_VARS[bild1];
        $test2 = str_replace("\", ":", $test);
        $test1 = split(":", $test2);
        $count = count($test1);
        $name = $test1[$count-1];
        $pfad1="./pics/$name";
        echo "Name:$name<br>Pfad:$HTTP_POST_VARS[bild1]<br>";
           $connection_id = ftp_connect("$ftp_server");
           $login_result = ftp_login($connection_id,"$benutzername","$passwort");
      #     if (!is_dir("./pics"))
      #     {
      #        $dir=split("/", "./pics");
      #        $path="";
      #        $ret = true;
      #        for ($i=1;$i<count($dir);$i++)
      #        {
      #          $path.="/".$dir[$i];
      #          if(!@ftp_chdir($connection_id,$path)){
      #          @ftp_chdir($connection_id,"/");
      #          if(!@ftp_mkdir($connection_id,$path)){
      #          $ret=false;
      #             }
      #            }
      #         }
      #       }
            if($login_result)echo "Verbindung hergestellt<br>";
              echo "$pfad1<br>$bild1";
              $asd1 = ftp_put($connection_id, $pfad1, $bild1, FTP_BINARY);
              echo "$asd1";
            ftp_quit($connection_id);
      ?>
      </body>
      </html>

      1. Hallo,

        Was Du hier versuchst ist ein Upload mit HTTP, nicht FTP. Zudem enthaelt das Script massig Fehler.
        Aber mal der Reihe nach:
        Ich nehme in dem Beispiel mal an, du wolltest C:\bild.jpg hochladen.

        • dein error_reporting steht nicht auf E_ALL

        <form action="test.php" method="post" enctype="multipart/form-data">

        • warum ist multipart.. ausescapiert

        $test = $HTTP_POST_VARS[bild1];

        • $_HTTP_POST_VARS ist veraltet, benutze $_POST
        • es gibt hier keine Konstante bild1, wohl aber eine String 'bild1', also muss es heissen
            $_POST['bild1']
        • print_r($_POST) ist leer
        • print_r($_FILES) hingegen hat alles was Du brauchst, naemlich sowas
          Array
          (
              [bild1] => Array
                  (
                      [name] => bild.jpg
                      [type] => image/jpeg
                      [tmp_name] => C:\WINDOWS\TEMP\phpA.tmp
                      [error] => 0
                      [size] => 1028
                  )

        )

        $test2 = str_replace("\", ":", $test);

        • entfaellt damit
        • du koenntest jetzt die Datei via HTTP in ein Verzeichnis auf deinem lokalen Server kopieren und von dort per FTP abschicken. Dabei hilft Dir dieses Beispiel
          Mit dem eigentlichen FTP-Teil habe ich mich noch nicht beschaeftigt, mach das erstmal soweit, dann sehen wir weiter.

        Dieter