Maria D.: Dateiendung erkennen bei upload

Hi Folks,

mit einem Formular mache ich ein Dateiupload.
Von PC auf Webserver.
Funktioniert prima!
Gibt es einen PHP-Befehl, mit dem ich nur die Dateiendung
erkennen kann.

Mit $_FILES['userfile']['name']
bekomme ich "nur" den gesamten Dateiname
z.B. musterdatei.pdf

Ich brauche aber nur die Dateiendung
".pdf" oder "pdf"

Hat mir jemand einen Tip?

  1. Hi,

    Gibt es einen PHP-Befehl, mit dem ich nur die Dateiendung
    erkennen kann.
    Mit $_FILES['userfile']['name']
    bekomme ich "nur" den gesamten Dateiname

    Du bekommst einen String. Es ist bar jedweden Belanges, dass es sich bei dessen Inhalt irgendwann einmal um einen Dateinamen gehandelt haben könnte.

    Ich brauche aber nur die Dateiendung

    Welchen Nutzen versprichst Du Dir davon? Was bringt es Dir beispielsweise, wenn jemand eine *.exe als *.html hochgeladen hat?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Mit deiner Antwort kann ich nix anfangen.

      1. Hi,

        Mit deiner Antwort kann ich nix anfangen.

        dann hast Du nicht lange genug über sie nachgedacht.

        Cheatah

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

    Mit $_FILES['userfile']['name']
    bekomme ich "nur" den gesamten Dateiname
    z.B. musterdatei.pdf

    Ich brauche aber nur die Dateiendung
    ".pdf" oder "pdf"

    Mit http://de2.php.net/manual/de/function.pathinfo.php kannst Du den namen zerlegen.

    Was willst Du mit der Endung anfangen? Ich hoffe, nichts sicherheitsrelevantes. Denn Clients lügen gerne...

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom,

      danke für deine Antwort.

      Mit deinem Befehl muss die Datei ja schon auf dem Webserver sein.
      Damit man an die Dateiendung kommt.
      Ich möchte aber schon vorher die Dateiendung erkennen und dann auf dem Webserver geändert abspeichern.

      cu

      1. hi,

        Mit deinem Befehl muss die Datei ja schon auf dem Webserver sein.
        Ich möchte aber schon vorher [...]

        beim dateiupload über ein formular gibt es kein "vorher".
        sobald das formular abgeschickt wird, wird auch die datei auf den server hochgeladen.
        alle aktionen deines scriptes werden erst danach erfolgen.

        gruß,
        wahsaga

        1. hi wahsaga,

          DANKE

          ich möchte eine datei hochladen und dann der datei einen anderen namen vergeben.

          (ohne rename wenn es geht)

          name=date("YmdHis");
          if(copy($file, "../news/".$name))
           {
           // ok
           }

          hierbei geht mir ja die dateiendung verloren.

          ich suche sowas in der art:

          name=date("YmdHis");
          if(copy($file, "../news/".$name.".".$dateiendung))
           {
           // ok
           }

          cu

          1. natürlich:

            mit $ ;-)

            $name=date("YmdHis");
            if(copy($file, "../news/".$name))
             {
             // ok
             }

            1. Hello,

              natürlich:

              mit $ ;-)

              $name=date("YmdHis");
              if(copy($file, "../news/".$name))
               {
               // ok
               }

              Und was ist an "meiner" Lösung dabei Auszusetzen?
              Der Originalname der Datei wird doch in
              $_FILES['...']['name'] oder übertragen. Den kann man dann zerlegen.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. $_FILES['...']['name'] oder übertragen. Den kann man dann zerlegen.

                hi tom,

                genau, wie macht man das?
                kannst du mir das mal zeigen.

                cu

                1. Hello,

                  $_FILES['...']['name'] oder übertragen. Den kann man dann zerlegen.

                  http://de.php.net/manual/de/features.file-upload.php#features.file-upload.post-method

                  bitte erst durchlesen und auch die UCN (User Contributed Notes) lesen.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
      2. Hello,

        Mit deinem Befehl muss die Datei ja schon auf dem Webserver sein.
        Damit man an die Dateiendung kommt.
        Ich möchte aber schon vorher die Dateiendung erkennen und dann auf dem Webserver geändert abspeichern.

        Dann hast Du mit PHP die falsche Kategorie gewählt.
        Mit JavaScript kann man den Inhalt eines <input type="file" ...>-Feldes abfragen, aber nicht ändern. Dann solltest Du also eine passende JavaScript-Funktion suchen. Ich könnte mir vorstellen, dass man mit split() weiterkommt.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

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

    http://www.selfphp.info/funktionsreferenz/regulaere_ausdruecke_posix/split.php

  4. Hi,
    Ich weiß nicht ob Du jetzt schon deine Antwort bekommen hast.
    Vielleicht hilft Dir das:

    /*
    $filenam ist die Variable aus dem Formular $HTTP_POST_FILES['fieldname']
    $save_location ist der Pfad auf dem Server wo die datei gespeichert werden soll
    */
    function upload($filename, $save_location){

    $date = date("_dmY");
     $filename_umbenannt = ereg_replace("[.]", $date.".", $filename);
     /*for debug
     echo $filename_umbenannt;
     */
     $upload = copy($filename_umbenannt, $save_location);
     if($upload){return true);
    }

    Ist ganz einfach und sollte vielleicht noch ein wenig optimiert werden. Hier gehe ich davon aus das der Dateiname nur einen "."
    hat, aber dass muss ja nicht so sein. Deshalb nur als Anregeung betrachten.
    Gruß
    Devel

    1. Hallo Maria,

      Sorry das war falsch!

      Probiere das: (bei mir funktioniert)

      <form action="<echo $PHP_SELF?>" method="post" enctype="multipart/form-data">
      <input type="file" name="files[]" style="width:350px"><br>
      <input type="file" name="files[]" style="width:350px"><br>
      <input type="submit" name="submit" value="speichern">
      </form>

      <?

      $location = "D://temp//";

      if(isset($submit)){
       $files = $HTTP_POST_FILES['files'];
       foreach ($files['name'] as $key=>$name){
        $date = date("_dmY");
        $filename_umbenannt = ereg_replace("[.]", $date.".", $name);
        $save_location = $location.$filename_umbenannt;
        echo $save_location;
        $save = copy($files['tmp_name'][$key], $save_location);
        unlink($files['tmp_name'][$key]);
        if ($save == false) {
            print ("Fehler...<br>");
        }else{
         print ("Gespeichert ...<br>");
        }

      }//end foreach
      }
      ?>

      Devel