Susi F.: Upload diverser Dateien

Guten morgen Mitglieder des Forums,

ich peile es einfach nicht in einem Uploadscript was schon soweit Funktioniert weitere If und Else Bedingungen einzufügen! Wollte das nachfolgende script Sicherer machen damit nur jpeg, jpg, gif, avi und flv Dateien hochgeladen werden dürfen.
Weiter soll die größe der Datei bestimmt werden z.B. 10000 KB.

Ich hoffe Ihr bringt mich auf den richtigen Pfad!

An alle im vorraus ein Dankeschön.

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>
<html>
<head>
<title>upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form enctype="multipart/form-data" action="dateiupload.php" method="post">
  <input name="datei" type="file" />
  <input type="submit" value="Datei speichern" />
</form>

<?php
$dateiname = $_FILES['datei']['name'];
$dateityp = $_FILES['datei']['typ'];
$dateigroesse = $_FILES['datei']['size'];
$dateierror = $_FILES['datei']['error'];
$upload_verzeichnis = dirname($_SERVER['SCRIPT_FILENAME']) . '/uploaddatei/';

if (isset($_FILES['datei']['name'])) {

if (move_uploaded_file($_FILES['datei']['tmp_name'],
                             "$upload_verzeichnis/$dateiname")) {
        echo "Die Datei $dateiname wurde erfolgreich gespeichert!";
      } else {
        echo "Die Datei $dateiname wurde nicht gespeichert!";
      }
}
?>
</body>
</html>

  1. Hello Susi,

    Ein wenig Vertrauen sollte man zu seiner Software shcon haben dürfen.
    Wenn ein einzelnes File fehlerfrei hochgeladen wurde, wird das $_FILES-Array angelegt sein.
    Frage solltest Du also nicht nach dem Vorhandensein von Namen, sondern von Fehlern!

    if (isset($_FILES['datei']['error']) and $_FILES['error'] === 0)
      {
          ## Reinschauen ins File, ob es ein Bild ist
          ## link:
          $_imgspec = getimagesize($_FILES['datei']['tmp_name']);

    if(_$imgspec[     ] ==          ;   ### such Dir mal die Werte raus. php.net ist grade down
          {
              if (move_uploaded_file($_FILES['datei']['tmp_name'],

    "$upload_verzeichnis/$dateiname")) {
            echo "Die Datei $dateiname wurde erfolgreich gespeichert!";
        }

    else
          {

    echo "Die Datei $dateiname wurde nicht gespeichert!";
        }

    else
          {
               kein Bild.
          }

    }
    ?>

    Dem vom Client übermittelten MIME-Type darfst Du nicht trauen.
    Du musst dringend darauf achten, dass Dir keine Executables, PHP-Scripte oder eine '.htaccess' auf den Server hochgeladen werden, insbesondere wenn die Bilder im Ablageverzeichnis nachher direkt über http erreichbar sein sollen.

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      Danke für Deine Statement!