ronny: fileupload IE vs. Opera

hi,

ich mache mit dem IE einen fileupload, der auch wunderbar funktioniert.

folgendes script dazu:

$tempname = $_FILES['file']['tmp_name'];
$bildname = $_FILES['file']['name'];

$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];

if($type != "image/gif" && $type != "image/pjpeg") {
$err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
}
if($size > "51200") {
$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 50 KB!";
}

If(empty($err)) {

copy($tempname,"benutzer/bilder/$HTTP_SESSION_VARS[benutzername]/$bildname");
echo "<center>Die Datei $bildname wurde erfolgreich hochgeladen!<br><br>";
rename("benutzer/bilder/$HTTP_SESSION_VARS[benutzername]/$bildname", "benutzer/bilder/$HTTP_SESSION_VARS[benutzername]/bild1.jpg");
chmod ("benutzer/bilder/$HTTP_SESSION_VARS[benutzername]/bild1.jpg", 0777);
echo "<br>Die Datei wurde umbenannt</center>";

}
else {
foreach($err as $error)
echo "$error<br>";
}

wenn ich gleichen vorgang mit dem opera machen möchte, bekomme ich immer die meldung

--> nur gif und jpeg Dateien dürfen hochgeladen werden.

warum das denn? unterstützt der das nicht?

danke

ronny

  1. Hi,

    if($type != "image/gif" && $type != "image/pjpeg") {

    was der Client behauptet, als MIME-Type zu verschicken, ist bar jeden Belanges. Validiere den _Inhalt_ der Datei. Siehe Archiv.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hello,

    $type = $_FILES['file']['type'];
    $size = $_FILES['file']['size'];

    if($type != "image/gif" && $type != "image/pjpeg") {
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.<br />";

    Auf den Mime-Type vom Browser würde ich mich auch nicht verlassen, sondern diesen auf dem Server überprüfen.

    Die Funktion getImageSize() liefert nur Daten, wenn  es ein Bild ist. und dann kann man den Header der Files auslesen und schauen, als was sie gekennzeichnet sind.

    Musst Du mal unter "Dateiformate" googlen.

    Grüße

    Tom

    -------------
    <?php
        $size = GetImageSize ("testimg.jpg",&$info);
        if (isset ($info["APP13"])) {
            $iptc = iptcparse ($info["APP13"]);
            var_dump ($iptc);
        }
    ?>

  3. Hallo,

    if($type != "image/gif" && $type != "image/pjpeg") {

    ^^^^^^^^^^^^
    Woher hast Du dieses "image/pjpeg"?

    Der korrekte MIME-Type fuer JPEG-Bilder heisst:
    image/jpeg
    Siehe z.B.
    http://www.iana.org/assignments/media-types/image/
    http://www.rfc-editor.org/rfc/rfc2046.txt
    http://selfhtml.teamone.de/diverses/mimetypen.htm#uebersicht

    Wie meine Vorredner schon schrieben, solltest Du Dich
    aber nicht auf das verlassen, was die Browser/Benutzer
    vorgeben, Dir zu schicken, sondern lieber pruefen,
    worum es sich wirklich handelt.
    getimagesize() duerfte Dir dabei helfen.

    Gruesse,

    Thomas

    1. hi,

      if($type != "image/gif" && $type != "image/pjpeg") {
                                              ^^^^^^^^^^^^
      Woher hast Du dieses "image/pjpeg"?

      hihi, ist mir noch gar nicht aufgefallen ;) ( schreibfehler ?)
      keine ahnung wie es da steht, seltsam das es trotzdem im IE funktioniert ;)

      jetzt gehst auch im opera, lol ;) dank für den hinweis, und die andere sache mit
      get_image_size schau ich mir heute abend gleich an ;)

      danke

      ronny

      1. Hallo,

        Woher hast Du dieses "image/pjpeg"?
        hihi, ist mir noch gar nicht aufgefallen ;) ( schreibfehler ?)

        Nein, vermutlich hast Du es irgendwo "abgeschrieben",
        wo es falsch stand. Und es nahm mich wunder, wo.
        Hab's jetzt vermutlich gefunden: In einem Benutzerkommentar unter
        http://www.php.net/manual/de/features.file-upload.php
        Dieser falsche MIME-Type wird noch an diversen Orten
        verbreitet oder diskutiert:
        http://www.google.com/search?q=image%2Fpjpeg

        Korrekt und offiziell ist aber wie gesagt:
        image/jpeg

        und die andere sache mit
        get_image_size schau ich mir heute abend gleich an ;)

        Tue das. Die Funktion hat uebrigens keine Underscores "_":
        getimagesize()
        http://www.php.net/manual/de/function.getimagesize.php

        Gruesse,

        Thomas