de.comp.lang.php.* FAQ

13.6. Wie kann ich einen Datei-Upload per FTP durchführen?

Keywords: Datei | Upload | FTP | Modul | Formular | HTTP

Antwort von Johannes Frömter

PHP hat eingebaute FTP-Funktionen , mittels derer man Dateien von oder zu einem FTP-Server übertragen kann. Es ist damit aber nicht möglich, Daten von einem Browser zu empfangen! Dies ist also keine Alternative zum HTTP-Upload per HTML-Formular (siehe hierzu "Wie funktioniert ein Datei-Upload über HTML-Formulare?").

PHP kann nur einen FTP-Client darstellen, der sich zu einem FTP-Server verbindet, d. h. der Verbindungsaufbau und die -steuerung müssen immer vom PHP-Script aus erfolgen, und die Daten für den Upload müssen sich bereits auf dem Webserver befinden. Vollständige Beispiele für eine FTP-Verbindung mit PHP finden sich im Manual und weiter unten auf dieser Seite.

Antwort von Kristian Köhntopp

Die FTP-Funktionen sind verfügbar, wenn PHP mit der Option --enable-ftp (bei PHP 3: --with-ftp) übersetzt worden ist. In der Ausgabe von phpinfo() erscheint dann in der Modulliste der FTP-Support.

Die Funktionen sind im Manual im Kapitel FTP-Funktionen im Einzelnen beschrieben.

Vollständiges Beispiel:

<h1>FTP Test</h1>
<?php
  $link = ftp_connect("localhost");
  if (!ftp_login($link, "ftp", "user@host.de"))
    die("Kann mich nicht einloggen.");

  if (!ftp_chdir($link, "/pub"))
    die("Kann nicht in das Zielverzeichnis /pub wechseln.");

  $name = ftp_nlist($link, ".");
  if (isset($name) and is_array($name)) {
    foreach ($name as $k => $v) {
      printf("%s - %s<br>\n", $k, $v);
    }
  }

  $size = ftp_size($link, "beispiel");
  if ($size < 0)
    die("Kann die Größe der Datei beispiel nicht bestimmen.");

  $mtime = ftp_mdtm($link, "beispiel");
  if ($mtime < 0)
    die("Kann die mtime der Datei beispiel nicht bestimmen.");

  printf("beispiel - %d Byte, %s<br>\n",
    $size,
    strftime("%c", $mtime));

  $result = ftp_get($link, "/tmp/bbb", "beispiel", FTP_BINARY);
  if (!$result)
    die("Download von Datei beispiel fehlgeschlagen.");

  if (!ftp_chdir($link, "/incoming"))
    die("Kann nicht in das Zielverzeiczhnis /incoming wechseln.");

  $result = ftp_put($link, "upload.txt", "/etc/termcap", FTP_BINARY);
  if (!$result)
    die("Upload von Datei termcap fehlgeschlagen.");

  ftp_quit($link);

  printf("Ende.<br>\n");
?>

Valid HTML 4.01! Valid CSS!

13.6. Wie kann ich einen Datei-Upload per FTP durchführen?
http://www.php-faq.de/q/q-datei-upload-ftp.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team