Mike: Bilder uploadscript nur Bilder erlauben

Hallo, ich hab mir ein Bilder Uploadscript besorgt, nun will ich aber dass man wirklich nur Bilder über das Formular Uploaden kann. Ich hab bereits accept="image/*" ins Script geschrieben, jedoch kann ich weiterhin .zip Datein und andere Datein hochladen die keine Bilder sind, wo liegt mein Fehler?

Code:
<?php
 // -----------------------------------------
 // Das Script kann unter Verwendung
 // dieses Vermerks uneingeschränkt
 // genutzt / verändert werden.
 //  © www.php-space.info
 // -----------------------------------------
 $deindomain = "http://www.deindomain.de";
 // Ihre Domain wo Sie das Script in geladen haben.
 $path = "test/";
 //Url zum Speicher Ordner
?>
<html>
<head>
<title>Upload</title>
</head>
<body>
<?
if($action){
 $filename = "";
 $time=time();
 if ($HTTP_POST_FILES['userfile']['tmp_name']<> 'none'){
  $file = $HTTP_POST_FILES['userfile']['name'];
  $temp = $HTTP_POST_FILES['userfile']['tmp_name'];
  $path_parts = pathinfo($file);
  $filename = "test_" . $time . "." . $path_parts["extension"];
  $dest = $path.$filename;
  copy($temp, $dest);
  echo 'Datei ist auf den Server!';
  echo 'Url der Datei: '.$deindomain.$path.$filename;
 }
} else {
?>
 <form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>">
 <input type="hidden" name="MAX_FILE_SIZE" value="400000">
 <br><strong>File Upload</strong><br><br>
 <input name="userfile" type="file" size=40 accept="image/*"><br><br>
 <input type="submit" name="action" value="Speichern">
 </form>
<? } ?>
</body>
</html>

  1. Hi,

    Hallo, ich hab mir ein Bilder Uploadscript besorgt, nun will ich aber dass man wirklich nur Bilder über das Formular Uploaden kann. Ich hab bereits accept="image/*" ins Script geschrieben, jedoch kann ich weiterhin .zip Datein und andere Datein hochladen die keine Bilder sind, wo liegt mein Fehler?

    Dein Fehler liegt im Glauben, Du könntest einem Client irgendwas vorschreiben. Wenn er Dir ZIP- oder EXE-Daten zuschicken will, dann tut er es. Rechne also damit.

    Code:
    <?php

    [...]

    if($action){

    An welcher Stelle wurde diese Variable denn deklariert und initialisiert?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Code:
      <?php
      [...]
      if($action){

      An welcher Stelle wurde diese Variable denn deklariert und initialisiert?

      In der php.ini unter dem lustigen Eintrag "register_globals", würde ich mal vermuten ... ;-)

      MffG
      EisFuX

  2. Hello,

    Hallo, ich hab mir ein Bilder Uploadscript besorgt, nun will ich aber dass man wirklich nur Bilder über das Formular Uploaden kann. Ich hab bereits accept="image/*" ins Script geschrieben, jedoch kann ich weiterhin .zip Datein und andere Datein hochladen die keine Bilder sind, wo liegt mein Fehler?

    Hochladen kannst Du alles.
    Erst wenn die Datei auf dem Server liegt, kannst Du sie untersuchen, welchen Typ sie wahrscheinlich hat.

    Dazu gibt es in PHP speziell für Bilder die Funktion

    getImageSize();

    http://www.php.net/manual/en/function.getimagesize.php

    Außerdem solltest Du nach einem erfolgten Upload als erstes die Statusmeldung abfragen

    if(isset($_FILES[$feldname]['error'] and $_FILES[$feldname]['error'] === 0)
      {
        ### Upload OK, _ein_ File wurde hochgeladen
      }

    oder komplexer...

    if(isset($_FILES[$feldname]['error'])
      {
        if($_FILES[$feldname]['error'] === 0)      ### auf identisch 0 prüfen!
        {
           ### Upload OK, _ein_ File wurde hochgeladen
        }
        elseif (is_array($_FILES [$feldname]['error'])
        {
           ### mehrere Files wurden hochgeladen
           ### jeden einzeln untersuchen
        }
        else
        {
           ### Fehlerbehandlung  echo 'Fehler beim Upload '.errortext($_FILES [$feldname]['error']};
        }

    }

    Jede weitere Behandlung kannst Du Dir sparen, wenn ['error'] !== 0 ist
    bzw. beim Multiupload  ['error'][$n] !== 0 ist

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau