Dateiupload Prüfung der Endung

  • Ich habe folgenden Code für den Dateiaupload:

    Code
    if($_REQUEST['Send'])
    {
            if($_FILES['Datei']['tmp_name'])
            {
    move_uploaded_file($_FILES['Datei']['tmp_name'], "upload/".$_FILES['Datei']['name']);     
    }}

    das funktioniert auch, nun habe ich eine Mime-Prüfung, die auch funktioniert:

    nun möchte ich statt dieser eine Dateiendung vornehmen, da der Upload zum uploaden von SC2Replays (.SC2Replay) dient:

    Leider funktioniert das nicht, warum?

  • Da hätte ich dir gleich 2 Alternativen zu bieten:

    Code
    function getExtension($filename = "") {
     $pathinfo = pathinfo($filename);
     return $pathinfo['extension']; 
    }
    Code
    function getExtension($filename = "") 
    { 
      return (false === ( $p = strrpos($filename, '.') ) ? '' : substr($filename, ++$p));
    }
  • Vielen Dank, aber leider klappt es nicht. Es kommt auch keine Fehlermeldung, er geht mit beiden deiner Varianten nicht in den if sondern in den else-Zweig.

  • Mit welcher Dateiendung versuchst Du es? Mit "SC2Replay" wird es nicht funktionieren, weil Du den Vergleichswert klein machst.

    Btw. wäre der Weg über den Content-type der sicherere ..

  • Vorsicht! Hier kann ein Hacker durch manuelles ändern des Dateinamens die datei irgendwo auf deinem Serverplatzieren und unschöne dinge anrichten.

    PHP
    function parseFilename($filename) {
        $pos=strpos($filename, dirname($filename));
        if (!$pos) $pos=0;
        return substr($filename, $pos);
    }

    Und threadi:
    Daran liegt es glaub ich nicht, sondern:
    @TS:

    PHP
    function getExtension ($filename) {
        $filename=parseFilename($filename);
        $dot=strrpos($file, ".");
        if ($dot) {
            return substr($file, $dot, strlen($file));
        }  else {
            return false;
        }
    }
    # Das hat bei mir IMMER geklappt, wobei das auch nichts anders tut als die Funktion vom TS


    Von daher denke ich, es liegt eher am Inhalt von
    $_FILES['Datei']['name']. Wie sieht denn der aus?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Btw. wäre der Weg über den Content-type der sicherere ..


    Ich habe schon versucht ein Content-type selber zu definieren, aber das ist mir nicht gelungen:

    Zitat

    Von daher denke ich, es liegt eher am Inhalt von
    $_FILES['Datei']['name']. Wie sieht denn der aus?

    Das ist nichts anderes als der Dateiname, z.B.: "Verschollener Tempel (4).SC2Replay"

    Tobse:
    Bei deinem Code ist laut Fehlermeldung parseFilename() nicht definiert

    Einmal editiert, zuletzt von supersass1 (21. Oktober 2010 um 22:03)

  • Hehe, mal wieder alle blind gewesen. Ich wette, da liegt der hase im pfeffer.
    @TS:
    die Funktion gobt es standardmäsig auch nicht, die habe ich im codeschnipsel darüber definiert. Der muss natürlich dazu ;)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!