Datei mit PHP über FTP auf dem Server hochladen

[Bildschirmfoto / Grafik] 
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.phpKopierenAusblendenZeilen

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 / Grafik] 
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.phpKopierenAusblendenZeilen

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

RSS-Feed selbst erstellen
Ein RSS-Feed lässt sich, mit wenigen Codezeilen, einfach selbst erstellen. Diese stellen in erster Linie ein vorzügliches Instrument dar, den Bekanntheitsgrad einer Website zu steigern.
Zeichenkodierung - Schriftzeichen richtig darstellen
Oft werden Umlaute, Akzentzeichen oder andere fehlerhafte Zeichen auf der Webseite angezeigt. Auch der Inhalt einer E-Mail, vom Kontaktformular der Website, kann falsche Umlautzeichen enthalten. Beispiele um diese Zeichen in der richtigen Zeichenkodierung darzustellen.
Browser-Sprachumschaltung
Diese Sprachumschaltung zeigt je nach der verwendeten Sprache (deutsch, englisch, ...) im Browser unterschiedlichen Inhalt an.