Datei mit PHP über FTP auf dem Server hochladen
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
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
- 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.
Berechnungen SQLite Mausrad Bausteine Floodsperre Zeitbalken EVA-Prinzip ASCII Hover-Effekt Farbschema Sicherheit Kalenderwoche Dateibrowser Metall-Effekt Generator Authentifizierung Absolute URL Rahmen Passwortschutz Zeitfunktionen Sortierkasten AES Counter Quelltext Marquee RSS Feed