PHP / Tipps / Bilder hochladen

von: Werner Zenk

Hier finden Sie ein Script mit dem der Besucher Bilder auf die Homepage laden kann. Das PHP-Script bietet folgende Einstellmöglichkeiten:
Angabe eines Verzeichnisses in das die Bilder hochgeladen werden können und die
Größe des Bildes das maximal hochgeladen werden darf (in Bytes).

Demo:


Das PHP-Script prüft ob eine Datei ausgewählt wurde, ob die Datei das richtige Format
hat und die maximale Dateigröße nicht überschreitet.
Nach erfolgreichen hochladen wird das Bild mit dem Dateinamen und der Dateigröße angezeigt.

Neu

 

Quelltext:Bilder hochladen
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
<!DOCTYPE html>
<html>
 <head>
  <title>Bilder hochladen</title>
 </head>
<body>

<fieldset>
 <legend>Bild hochladen</legend>

<?php
/* Bilder hochladen - Version vom: 30.11.2011 -
 Homepage-Total.de */

// Verzeichnis in das die Bilder hochgeladen
// werden sollen (ausgehend von dieser Datei).
// Das Verzeichnis benötigt Schreibrechte!
$verzeichnis "bilder/";

// Die Größe des Bildes das maximal
// hochgeladen werden darf (in Bytes).
$maxgroesse 1024// 1024 Bytes = 1 KB (1048576 Bytes = 1 MB)
// Umrechner: www.homepage-total.de/tools/umrechner-byte-kilobyte.php

// Angabe der Mimetypen die hochgeladen werden dürfen.
// Unter: http://www.homepage-total.de/php/content_types.php
// finden Sie eine Liste der Mimetypen.
$mimetypen = array(
 
"png" => "image/png",
 
"jpg" => "image/jpeg",
 
"jpg" => "image/pjpeg",
 
"jpeg" => "image/jpeg",
 
"gif" => "image/gif",
);

// Maximale Länge des Dateinamens
$maxlaenge 35;

// Eine bereits vorhandene Datei mit gleichen Namen ersetzen (ja/nein)
// Bei "nein" wird die Datei mit dem Namen und einer Zufallszahl, umbenannt.
$ersetzen "nein";

// Passwortschutz (ja/nein)
$passwortschutz "nein";

// Passwort
$passwort "user";

echo 
'<form action="' $_SERVER["SCRIPT_NAME"] . '" method="post" enctype="multipart/form-data">
 Bild auswählen: <input type="file" name="datei" size="25"> <br>
 Dateiformat: ' 
implode(", "array_unique(array_keys($mimetypen))) . 
' - Dateigröße max.: ' . (number_format(($maxgroesse 1024), 2","".")) . ' KB <br><br>' 
(
$passwortschutz == "ja" 'Passwort: <input type="password" name="passwort">' '') . 
'<input type="hidden" name="MAX_FILE_SIZE" value="' $maxgroesse '">
 <input type="submit" name="submit" value="Bild hochladen">'
;

if (
$_SERVER["REQUEST_METHOD"] == "POST") {
 if (
$passwortschutz == "ja") {
  if (
$_POST["passwort"] != $passwort) {
   die(
'<p>Sie haben keine Berechtigung!</p>');
  }
 }
 if (
is_writeable($verzeichnis)) {
  if (isset(
$_FILES["datei"]["name"]) && $_FILES["datei"]["name"] != "") {
   if (
$_FILES["datei"]["error"] === UPLOAD_ERR_OK) {
    if (
is_uploaded_file($_FILES["datei"]["tmp_name"])) {
     if (
$_FILES["datei"]["size"<$maxgroesse) {
      
$array explode("."basename($_FILES["datei"]["name"]));
      
$dateiendung strtolower(end($array));
      if (
in_array($dateiendungarray_keys($mimetypen))) {
       if (
in_array($_FILES["datei"]["type"], $mimetypen)) {
        
$dateiname preg_replace("/[^a-z0-9_-]/"""strtolower(strtr($array[0], "äöüß""aous")));
        
$neuername substr($dateiname0$maxlaenge) . "." $dateiendung;
        if (
file_exists($verzeichnis $neuername)) {
         if (
$ersetzen == "ja") {
          
unlink($verzeichnis $neuername);
         }
         else {
          
$neuername substr($dateiname0, ($maxlaenge 5)) . "_" mt_rand(19999) . "." $dateiendung;
         }
        }
        if (
move_uploaded_file($_FILES["datei"]["tmp_name"], $verzeichnis $neuername)) {
         echo 
'<p>Die Datei wurde erfolgreich hochgeladen<br> <img src="' $verzeichnis $neuername '">';
         echo 
' <br>' $neuername ' - ' number_format(($_FILES["datei"]["size"] / 1024), 2","".") . ' KB</p>';
        }
        else {
         echo 
'<p>Beim hochladen der Datei &bdquo;' $_FILES["datei"]["name"] . '&rdquo; ist leider ein Fehler aufgetreten!</p>';
        }
       }
       else {
        echo 
'<p>Ungültiger Mimetyp: "' $_FILES["datei"]["type"] . '"!</p>';
       }
      }
      else {
       echo 
'<p>Das Dateiformat: "' $dateiendung '" ist nicht erlaubt!</p>';
      }
     }
     else {
      echo 
'<p>Die Datei &bdquo;' $_FILES["datei"]["name"] . '&rdquo; ist mit ' number_format(($_FILES["datei"]["size"] / 1024), 2","".") . ' KB leider zu groß!</p>';
     }
    }
   }
  }
  else {
   echo 
'<p>Bitte wählen Sie eine Datei aus!</p>';
  }
 }
 else {
  echo 
'<p>Das Verzeichnis: "' $verzeichnis '" besitzt keine Schreibrechte!</p>';
 }
}
echo 
'</form>';
?>

</fieldset>

</body>
</html>


Das Verzeichnis, in das Sie Ihre Bilder (Dateien) hochladen, benötigt möglicherweise Schreib- und Zugriffsrechte

 

Große Dateien hochladen
Um das "Upload-Limit" des Servers zu ermitteln, führen Sie einfach
<?php echo ini_get('upload_max_filesize'); ?> aus.
Die erscheinende Zahl (z.B.: 10M) zeigt dann die maximal erlaubte Größe an.

 

 

Manuelle Diashow


Natürlich möchte man die Bilder auf seiner Homepage auch anzeigen.
Dafür eignet sich das folgende PHP-Script, dieses zeigt eine Link-, und Formular-
Navigation an. Darin kann man nun über Links vorwärts oder zurück navigieren oder
durch die Eingabe einer Zahl direkt zum Bild gehen. Dieses Script lässt sich als eine Art „Diashow” nutzen.

Demo:


Bei diesen Bildern handelt es sich nicht um die im oberen Demo hochgeladenen Dateien!

 

Quelltext:Bilder anzeigen
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
<!DOCTYPE html>
<html>
 <head>
  <title>Bilder anzeigen</title>
 </head>
<body style="text-align: center;">

<?php
/* Bilder anzeigen - 04.08.2011 - Homepage-Total.de
 Für dieses Script wird PHP5 benötigt. */

// Verzeichnis eintragen.
// Das Verzeichnis darf nur Bilder enthalten.
$verzeichnis "bilder/";

$bilder array_slice(scanDir($verzeichnis), 2);

$anzahl count($bilder);
$seite = isset($_GET["seite"]) ? (int)$_GET["seite"] : 1;

// Link-, und Formular-Navigation
echo '<form action="" method="get" autocomplete="off">Bild: ' 
 ((
$seite 1> '<a href="?seite=' . ($seite 1) . '">&larr;</a>' "&nbsp; &nbsp; ") .
' <input type="text" value="' $seite '" name="seite" size="3" onclick="this.select()"> von ' $anzahl .
 ((
$seite 1<$anzahl ' <a href="?seite=' . ($seite 1) . '">&rarr;</a>' "&nbsp; &nbsp; &nbsp; ") .
'</form>';

foreach (
$bilder as $zaehler => $element) {
 if ((
$zaehler 1) == $seite) {
  echo 
'<p><img src="' $verzeichnis $element '"><br>' $element '</p>';
 }
}
?>

</body>
</html>

 

Herunterladen:   bilder_hochladen_und_anzeigen.zip bilder_hochladen_und_anzeigen.zip
 Version vom: 27.11.2011
 Dateigröße: 3 KB
 Dateien: 2

  bilder_anzeigen.php - 1 KB - 27.11.11
  bilder_hochladen.php - 3,9 KB - 27.11.11

 

Manuelle Diashow mit Vorschaubilder

Eine weitere Version, diese erstellt automatisch Vorschaubilder (Thumbnails) der Bilder. Voraussetzung ist eine installierte GD-Grafikbibliothek auf dem Webserver.

Herunterladen:   bilder_anzeigen_thumbnail.zip bilder_anzeigen_thumbnail.zip
 Version vom: 26.03.2012
 Dateigröße: 5,2 KB
 Dateien: 4

  bilder_anzeigen.php - 2,9 KB - 26.03.12
  details.php - 457 Byte - 26.03.12
  bilder_hochladen.php - 3,7 KB - 26.03.12
  einstellungen.php - 1,2 KB - 25.01.12

    Und Ihre Meinung?
      Sie vermissen auf dieser Seite wichtige Informationen oder haben Hinweise für uns?
Kommentare: 11 » aufmachen   
Mike:
Coole Sache! Besonders gut gefällt mir die Diashow.

Manu:
Genau so ein UploadTool hab ich gesucht! Und das mit der DiaShow ist super! Danke

color:
hallihallo... leider taucht bei mir nur Quelltext auf ich weiß nicht, was ich falsch mache...

Werner:
Der Webserver auf dem deine Homepage gespeichert ist muss PHP unterstützen.

patrick:
Super Sache ich finde das hier einfach super konnte schon viel lernen dadurch das ich es ausprobieren konnte DANKE

Tom:
"Ungültges Dateiformat!" toll mit einem Rechtsschreibfehler --> Richtig ist "Ungültiges Dateiformat!"

Werner:
Danke , Herr Lehrer!

Tammy:
Wirklich schade - das Uploadtool bringt mir jedes mal ungültiges Dateiformat - obwohl ich jpg ausgewählt habe - und auch die kleinschreibung passt. Habe nur die Grösse auf 10 MB angepasst und Passwort auf ja gesetzt.Mit den kleinsten Gif Dateien läuft es. Habe das Array mit doc erweitert - auch falsches Dateiformiat. Vielleicht hat wer eine Lösung? Bin leider in PHP noch nicht soooo weit Liebe Grüsse: Tammy

Werner:
Das Problem liegt am Internet Explorer (Version 5-8), dieser sendet bei den Mimetypen "image/pjpeg" statt "image/jpeg". Ich habe das Problem beheben können!

Mike:
Warum werden Umlaute und Sonderzeichen im Dateinamen gefiltert?

Werner:
Aufgrund der vielen möglichen Arten der Darstellung von Verzeichnissen kann man nicht garantieren, dass Dateien mit exotischen Namen (wie z.B. mit enthaltenen Leerzeichen) auch wirklich richtig verarbeitet werden.
Hilfe finden Sie im » netzgemein.de - Forum. Auch als „Gast” können Sie dort Fragen stellen!  
 Das könnte Sie interessieren:
Zeichenkette trennen  Bild proportional zur Breite verkleinern  HTML-Tabelle sortieren - Eine HTML-Tabelle mit PHP über einem Link sortieren  Sonnenaufgang und Sonnenuntergang berechnen  Mehrere Dateien zusammenfügen  Mit PHP schreiben und lesen (3) - Dateien auf dem Server hochladen (upload).  Mit PHP schreiben und lesen (9) - Rechnen mit PHP.  …mehr
© 2000-2012 Homepage-Total.de Kontakt - Impressum - Banner