Datei mit PHP über FTP auf dem Server hochladen

[Bildschirmfoto] Dateien zum hochladen auswählen

Manchmal möchte man eine Datei direkt vom PC auf dem Server hochladen ohne erst ein FTP-Programm (z.B.: Filezilla) nutzen zu müssen. Mit den FTP-Funktionen von PHP stellt dies kein Problem dar, hier folgt eine kleine Anleitung in Form eines Quelltextes.

Bei dem "FTP Client" handelt es sich um einen lokalen Webserver der auf dem PC installiert ist. Siehe: Lokalen Webserver einrichten und verwenden

Quelltext:  ftp.php AusblendenKopierenLinkZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Datei auf dem Server hochladen</title>

  <style>
  body {
   font-family: Verdana, Arial, Sans-Serif;
  }
  </style>


 </head>
<body>

<h3>Datei auf dem Server hochladen</h3>

<?php
// PHP Fehlermeldungen anzeigen
error_reporting(E_ALL);
ini_set("display_errors"true);

$ftp_server ''// Server
$ftp_user_name ''// Benutzername
$ftp_user_pass ''// Passwort

// Der Pfad auf dem Server zu dem gewechselt werden soll,
// ausgehend vom obersten Verzeichnis.
$server_path '/';

// Die Datei die vom PC hoch geladen wird, sollte sich im aktuellen Verzeichnis
// befinden ansonsten muss ein absoluter Pfad angegeben werden.
// Bsp.:  C:\xampp\htdocs\test\ftp\test.txt
$file 'test.txt';

// Der Transfer-Modus muss entweder FTP_ASCII oder FTP_BINARY sein.
$transfer_modus FTP_ASCII;

// Verbindung zum Server aufbauen
if ($conn_id ftp_connect($ftp_server)) {

 
// Anmeldung mit Benutzername und Passwort
 
if (ftp_login($conn_id$ftp_user_name$ftp_user_pass)) {

  
// Verzeichnis wechseln
  
if (ftp_chdir($conn_id$server_path)) {

   
// Öffne Datei zum Lesen
   
$filehandle fopen($file"r");

   
// Passiven Modus einschalten
   
ftp_pasv($conn_idtrue);

   
// Datei hochladen
   
$filename basename($file);
   if (
ftp_fput($conn_id$filename$filehandle$transfer_modus)) {
    echo 
'<p>Die Datei: "' $filename '" wurde erfolgreich ins Verzeichnis "' ftp_pwd($conn_id) . '" hoch geladen.</p>';
   }
   else {
    echo 
'<p>Die Datei: "' $filename '" konnte nicht hoch geladen werden!</p>';
   }

   
// Datei schließen
   
fclose($filehandle);
  }
  else {
   echo 
'<p>Der Verzeichniswechsel zu: "' $server_path '" ist fehlgeschlagen!</p>';
  }
 }
 else {
  echo 
'<p>Die Anmeldung am Server: "' $ftp_server '" ist fehlgeschlagen!</p>';
 }

 
// Verbindung zum Server schließen
 
ftp_close($conn_id);
}
else {
 echo 
'<p>Konnte keine Verbindung zum Server: "' $ftp_server '" aufbauen!</p>';
}
?>

</body>
</html>

Dateien zum hochladen auswählen

[Bildschirmfoto] Dateien zum hochladen auswählen

Da es bei mehreren Dateien mühselig ist jede Datei erst ins Script zu schreiben, listet das folgende die Dateien aus einem Verzeichnis in einem Formular auf, nun kann man diese bequem auswählen und mit einem Klick auf dem Button hochladen.

Quelltext:  ftp_upload.php AusblendenKopierenLinkZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Dateien hochladen</title>

  <style>
  body {
   font-family: Verdana, Arial, Sans-Serif;
  }

  input[type="checkbox"]:checked + label {
   color: Royalblue;
  }
  </style>


 </head>
<body>

<?php
// PHP Fehlermeldungen anzeigen
error_reporting(E_ALL);
ini_set("display_errors"true);

$ftp_server ''// Server
$ftp_user_name ''// Benutzername
$ftp_user_pass ''// Passwort

// Der Verzeichnispfad auf dem Server zu dem gewechselt
// werden soll, ausgehend vom obersten Verzeichnis.
$server_path 'dasObersteVerzeichnis/test/';

// Lokales Verzeichnis (Absoluter Pfad ohne Backslash am Ende).
$local_path 'C:\xampp\htdocs\test';

// Formular
echo '<form method="post">
<fieldset>
 <legend>Dateien hochladen</legend>
';

// Verzeichnis auslesen
$files scanDir($local_path);

// Den Inhalt des Verzeichnises ausgeben
foreach ($files as $nr => $file) {
 if (!
is_dir($local_path DIRECTORY_SEPARATOR $file)) {
 echo 
<input type="checkbox" name="file[]" value="' $local_path DIRECTORY_SEPARATOR $file .
  
'" id="n' $nr '"> <label for="n' $nr '">$file <small> - ' .
  (
number_format((filesize($local_path DIRECTORY_SEPARATOR $file) / 1024), 2',''.')) .
  
' KB - ' date("d.m.Y"fileMtime($local_path DIRECTORY_SEPARATOR $file)) .
  
'</small></label> <br>PHP_EOL;
 }
}

echo 
<br>
 <input type="submit" value="OK">
</fieldset>
</form>
';

// Wurden Daten über POST gesendet
if ("POST" == $_SERVER["REQUEST_METHOD"]) {

 
// Wurde mind. eine Datei ausgewählt
 
if (isset($_POST["file"])) {

  
// Verbindung zum Server aufbauen
  
if ($conn_id ftp_connect($ftp_server)) {

   
// Anmeldung mit Benutzername und Passwort
   
if (ftp_login($conn_id$ftp_user_name$ftp_user_pass)) {

    
// Verzeichnis wechseln
    
if (ftp_chdir($conn_id$server_path)) {

     
// Die über POST gesendeten Dateinamen in einer Schleife auslesen
     
foreach ($_POST["file"] as $file) {

      
// Transfer-Modus je nach Dateityp
      
$transfer_modus false;
      
$file_type pathinfo($filePATHINFO_EXTENSION);

      
// Text basierte Dateien (ggf. anpassen)
      
if (in_array($file_type, ["txt""htm""css""php""js", ])) {
       
$transfer_modus FTP_ASCII;
      }

      
// Binäre Dateien (ggf. anpassen)
      
if (in_array($file_type, ["jpg""gif""png", ])) {
       
$transfer_modus FTP_BINARY;
      }

      
// Transfer-Modus (true)
      
if ($transfer_modus) {

       
// Öffne Datei zum Lesen
       
$file_handle fopen($file"r");

       
// Passiven Modus einschalten
       
ftp_pasv($conn_idtrue);

       
// Datei hochladen
       
$file_name basename($file);
       if (
ftp_fput($conn_id$file_name$file_handle$transfer_modus)) {
        echo 
'<p>Die Datei: "' $file_name '" wurde erfolgreich ins Verzeichnis "' .
         
ftp_pwd($conn_id) . '" hoch geladen.</p>';
       }
       else {
        echo 
'<p>Die Datei: "' $file_name '" konnte nicht hoch geladen werden!</p>';
       }

       
// Datei schließen
       
fclose($file_handle);
      }
      else {
       echo 
'<p>Unbekannter Dateityp: "' $file_type '"!</p>';
      }
     }
    }
    else {
     echo 
'<p>Der Verzeichniswechsel zu: "' $server_path '" ist fehlgeschlagen!</p>';
    }
   }
   else {
    echo 
'<p>Die Anmeldung am Server: "' $ftp_server '" ist fehlgeschlagen!</p>';
   }

   
// Verbindung zum Server schließen
   
ftp_close($conn_id);
  }
  else {
   echo 
'<p>Konnte keine Verbindung zum Server: "' $ftp_server '" aufbauen!</p>';
  }
 }
 else {
  echo 
'<p>Bitte wählen Sie mind. eine Datei aus!</p>';
 }
}
?>

</body>
</html>

➤ Gefällt Ihnen das Skript oder haben Sie einen Fehler gefunden? Dann freue ich mich auf Ihren Kommentar.

Tipps

Berechnungen mit dem Datum
Feiertage, Mondphase, Wochentag, Sonnenaufgang und Sonnenuntergang, Julianisches Datum, Sternzeichen, ...
Bilder in einer Datenbank-Tabelle speichern und ausgeben
Das Hochladen von Bildern in die Datenbank und die Anzeige mit PHP ist relativ einfach. Mit dem folgenden PHP-Code lädt der Benutzer die Bilder hoch, die dann sicher in die Datenbank-Tabelle gelangen.
10 Regeln zu Dateinamen
Die Entscheidung, wie Sie die Dateien und Verzeichnisse (Ordner) auf Ihrer Website benennen ist nicht ganz Ihnen überlassen. Es gibt einiges, worauf Sie bei dieser Wahl achten müssen.
Erster Eintrag in eine MySQL-Datenbank mit PHP
Eine Anleitung wie man ein Nachrichten-System mit einer MySQL (oder MariaDB)-Datenbank über PHP realisieren kann. Komplett mit Formularen zum eintragen, anzeigen und bearbeiten der Daten.

Abonniere meinen RSS-Feed um über aktuelle Seiten benachrichtigt zu werden.