Datei mit PHP über FTP auf dem Server hochladen
![[Bildschirmfoto / Grafik]
Dateien zum hochladen auswählen [Bildschirmfoto / Grafik]
Dateien zum hochladen auswählen](img/ftp.png)
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 Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
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_id, true);
// 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 [Bildschirmfoto / Grafik]
Dateien zum hochladen auswählen](img/ftp_upload.png)
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 Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
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($file, PATHINFO_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_id, true);
// 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
- Visual Studio Code - Tipps
- Mit den Tipps können Sie direkt einsteigen und lernen, wie Sie mit Visual Studio Code produktiv sein können.
- Zeitansage in JavaScript
- Dieses JavaScript gibt die aktuelle Uhrzeit in Worten aus.
- 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.
- Diashow
- Die Diashow liest Bilder aus einem Verzeichnis aus (mit PHP), und zeigt diese mit Hilfe von JavaScript an.
Abonniere meinen RSS-Feed
um über aktuelle Seiten benachrichtigt zu werden.
Lokaler Webserver Blend-Mode ASCII Sprachumschaltung Kalenderwoche Stoppwortliste EVA-Prinzip Quelltext Zoom-Funktion localStorage RSS Feed Floodsperre Fotoalbum ToDo-Liste Formulare Countdown-Generator Veranstaltungsliste Dynamische Seiten AES Rahmen Diashow Backdrop-Filter Silbentrennung Zeitansage Webseitenschutz