Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] File Upload: Unter anderem Namen speichern

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] File Upload: Unter anderem Namen speichern

    Hallo,

    ich brauch mal wieder eure Hilfe.
    Ich hab ein Skript im Internet gefunden und es funktioniert (GSD!)
    Ich lade eine Datei über PHP hoch und zuletzt kopiere ich es folgendermassen (das ist auch noch aus dem Original-Skript):

    PHP-Code:
    if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) {
    echo 
    "Datei erfolgreich hochgeladen!<br>";
    }
    else {
    echo 
    "Datei konnte nicht hochgeladen werden.";

    Statt $_FILES["file"]["name"] hätte ich jetzt aber gerne einen anderen Dateinamen (nämlich die Variable $id), jedoch mit der richtigen Endung, die da jpg, jpeg, gif, bmp und png lauten könnte.

    Ich hab's schon getestet, indem ich $id.".gif" anstelle $_FILES["file"]["name"] verwendet habe, und es funktioniert - aber es musste halt ein gif sein

    Wenn nun die Länge der Dateierweiterung immer gleich wäre, würde ich vielleicht so vorgehen:
    PHP-Code:
    $len strlen($_FILES["file"]["name"] )-4;
    $erw substr($_FILES["file"]["name"] ,$len,4
    und dann den Dateinamen mit $id.$erw angeben, aber ich hab ja noch das jpeg, ich glaub, ich blick nicht mehr durch.

    Ich such schon so lange nach ner Lösung und hab auch preg_match() gefunden, was mir vielleicht helfen würde, wenn ich die Syntax begreifen würde. Aber ich glaube, mit meinem Anfängerwissen blick ich da nicht durch und mein schönes Anfängerbuch sagt dazu gar nix.

    Ich brauche also einen Hinweis, wie ich von $_FILES["file"]["name"] den letzten Punkt im String mit den letzten drei bzw. vier Buchstaben abfragen kann.

    Danke
    Uli


  • #2
    der typ steht in $_FILES['file']['type'] diesen wert kannst Du dann einer extension zuordnen

    Kommentar


    • #3
      PHP-Code:
      $parts explode('.'$_FILES["file"]["name"]);
      $ext $parts[count($parts) - 1];
      if(
      move_uploaded_file($_FILES["file"]["tmp_name"], "$id.$ext")) {
          echo 
      "Datei erfolgreich hochgeladen!<br />";
      }
      else {
          echo 
      "Datei konnte nicht hochgeladen werden.";

      Gruss
      L

      Kommentar


      • #4
        naja ich würde der extension im dateinamen erstmal nicht glauben...

        Kommentar


        • #5
          Wow, danke, ihr seid ja schnell.
          Doch mir ist noch was anderes eingefallen (ich hab das Gefühl, sobald ich mein Problem mal schriftlich fixiert habe, bin ich danach so entspannt, dass mir prompt was dazu einfällt, auf das ich vorher nicht gekommen bin):

          PHP-Code:
          $len strlen($_FILES["file"]["name"] )-5;
          $erw substr($_FILES["file"]["name"] ,$len,5);
          $erw strstr($erw,"."); 
          Obwohl das nicht viel anders aussieht als das, was ich vorher schon hatte
          Aber mehr als 4 Buchstaben nach dem Komma können ja nicht kommen, also sollte es so klappen!

          EDIT
          @HPR1974
          Warum der Extension nicht glauben?
          Zuletzt geändert von yourdaydream; 08.10.2008, 13:49. Grund: Die Frage drängte sich mir auf...

          Kommentar


          • #6
            Zitat von HPR1974 Beitrag anzeigen
            naja ich würde der extension im dateinamen erstmal nicht glauben...
            Genausowenig wie dem, was in $_FILES['file']['type'] steht, das wird offensichtlich auch aus der Extension gebildet. Wenn ich die gleiche Datei unter drei verschiedenen Extensions (class/gif/java) hochlade (es handelt sich um eine Java-Source-Datei) erhalte ich für diese die Typen «application/octet-stream», «image/gif» und «text/x-java».

            @yourdaydream
            Ich denke, die Version mit explode() ist doch etwas eleganter, und v.a. nicht auf eine bestimmte Länge fixiert.
            Gruss
            L

            Kommentar


            • #7
              hm, ich bekomme immer den gleichen file type egal welche extension ich meiner Datei anhänge.

              Kommentar


              • #8
                Zitat von HPR1974 Beitrag anzeigen
                hm, ich bekomme immer den gleichen file type egal welche extension ich meiner Datei anhänge.
                Hab grad mal ein paar Versuche gemacht. Das Ganze schein nicht nur Browser- sondern auch (Client)-OS-abhängig zu sein. Das vorher genannte Verhalten haben Firefox, Seamonkey und Konqueror unter Linux (Centos 5/64), Opera bringt dort «application/octet-stream», «image/gif» und «application/octet-stream».
                Unter Windoof liefert Firefox dasselbe, wie Opera unter Linux. Und der IE einfach drei mal «text/plain».
                Auf jeden Fall sind es keine verlässlichen Angaben.
                Zuletzt geändert von lazydog; 09.10.2008, 13:30.
                Gruss
                L

                Kommentar


                • #9
                  ZITAT PHP.NET MANBUEL

                  PHP-Code:
                    <?php

                  $path_parts 
                  pathinfo("/www/htdocs/index.html");

                  echo 
                  $path_parts["dirname"] . "\n";
                  echo 
                  $path_parts["basename"] . "\n";
                  echo 
                  $path_parts["extension"] . "\n";

                  ?>
                  ergebnis :

                  Code:
                      [dirname] => /www/htdocs
                      [basename] => index.html
                      [extension] => html
                      [filename] => index

                  Kommentar


                  • #10
                    Danke @7Style!
                    Manchmal weiß man einfach nicht wonach man sucht, aber das klingt so einfach, ich nehm das jetzt! (und werd's in Zukunft auch noch brauchen!!)
                    VG Ulrike

                    Kommentar

                    Lädt...
                    X