Marco: Dateiupload => Der Name der Datei soll so bleiben !!

Hallo zusammen,

nun wenn ich mit dem Scirpt

<?php
  if (isset($probe)) :
    copy($probe, "$myDir"."sonderangebot.jpg");
    echo("···> Die Datei wurde erfolgreich hochgeladen !!");
 endif;
?>

die Datei hochlade dann heisst Sie ja immer sonderangebot.jpg
ich möchte jetzt aber, dass die Datei ihren originalen Namen behält also wenn ich z.B die Datei hallo.doc hochlade, dass sie dann auf meinem Server auch hallo.doc heisst.

Was genau muss ich da ändern.

Vielen Dank für Eure Hilfe

Gruss Marco

  1. Hallo Marco.

    Ein Feature-Artikel befasst sich speziell mit dem Thema Dateiupload mit PHP (http://aktuell.de.selfhtml.org/artikel/phpasp/php-uploadcheck/index.htm#a4). Ich denke es ist besser Dich darauf zu verweisen denn dort steht diese und noch viel mehr Wissenswertes dazu.

    Grüße aus Würzburg
    Julian

    1. Hallo Marco.

      Ein Feature-Artikel befasst sich speziell mit dem Thema Dateiupload mit PHP (http://aktuell.de.selfhtml.org/artikel/phpasp/php-uploadcheck/index.htm#a4). Ich denke es ist besser Dich darauf zu verweisen denn dort steht diese und noch viel mehr Wissenswertes dazu.

      Grüße aus Würzburg
      Julian

      Hallo Julian,

      ich habe jetzt alles durchgelesen sogar 2x aber es klappt immer noch nicht dass der Dateiname so bleibt wie auf meinem Rechner... Ich will doch nur wenn ich z.B hallo.doc hochlade, dass Sie auch so auf dem Server ist !!

      hmm, wieso klappt das nicht bei mir.

      Freue mich auf Deine Antwort !!

      1. Hallo Marco.

        ich wüßte darauf keine Antwort, die nicht in dem Artikel steht!
        Hast Du wirklich die Namenszeile beachtet?

        <input type="file" name="DeinFilename"> ...

        Tip: prüfe den Namen dann auch auf zulässige Zeichen (keine Lücken, Umlaute etc. ),
        sonst funktioniert bei einigen Servern/Browsern der Up/Download
        nicht immer...

        Gruesse Dacor

        1. Hallo Dacor,

          Hast Du wirklich die Namenszeile beachtet?

          <input type="file" name="DeinFilename"> ...

          Das ist so nicht richtig verstanden.

          name="DeinFilename" bezeichnit im Input-Objekt den Namen der Variablen, die den Filename auf dem Client transportiert.

          PHP macht auf dem Zielsystem (Server / Host) dann

          $DeinFilename
          $DeinFilename_name
          $DeinFilename_type
          $DeinFilename_size

          daraus.

          IN den Variablen mit dem Namen "DeinFilename..." stehen die gesuchten Werte.

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

          Tom

          1. Hallo Dacor,

            Hast Du wirklich die Namenszeile beachtet?

            <input type="file" name="DeinFilename"> ...

            Das ist so nicht richtig verstanden.

            name="DeinFilename" bezeichnit im Input-Objekt den Namen der Variablen, die den Filename auf dem Client transportiert.

            PHP macht auf dem Zielsystem (Server / Host) dann

            $DeinFilename
            $DeinFilename_name
            $DeinFilename_type
            $DeinFilename_size

            daraus.

            IN den Variablen mit dem Namen "DeinFilename..." stehen die gesuchten Werte.

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

            Tom

            Hallo Tom,

            ja scoh aber ich kann dann nicht einfach echo $DeinFilename_name machen sonst kommt da nichts muss doch noch eine Variable davor setzen oder ?!?

            1. Hallo Marco,

              $DeinFilename
              $DeinFilename_name
              $DeinFilename_type
              $DeinFilename_size

              daraus.

              IN den Variablen mit dem Namen "DeinFilename..." stehen die gesuchten Werte.

              ja scoh aber ich kann dann nicht einfach echo $DeinFilename_name machen sonst kommt da nichts muss doch noch eine Variable davor setzen oder ?!?

              Jetzt hast Du mich gerade auf dem linken Fuß erwischt. Aber ich weiß ja, wo man nachschauen kann: http://www.php.net/manual/de/features.file-upload.php

              Du hast also Recht, es ist eine extra Record-Gruppe (Klasse) dafür eingerichtet worden.

              Grüße

              Tom

              1. Hallo Marco,

                $DeinFilename
                $DeinFilename_name
                $DeinFilename_type
                $DeinFilename_size

                daraus.

                IN den Variablen mit dem Namen "DeinFilename..." stehen die gesuchten Werte.

                ja scoh aber ich kann dann nicht einfach echo $DeinFilename_name machen sonst kommt da nichts muss doch noch eine Variable davor setzen oder ?!?

                Jetzt hast Du mich gerade auf dem linken Fuß erwischt. Aber ich weiß ja, wo man nachschauen kann: http://www.php.net/manual/de/features.file-upload.php

                Du hast also Recht, es ist eine extra Record-Gruppe (Klasse) dafür eingerichtet worden.

                Grüße

                Tom

                Vielen Dank für Deine Bemühungen !!

      2. Hallo Marco,

        http://aktuell.de.selfhtml.org/artikel/phpasp/php-uploadcheck/index.htm#a4

        Den Artikel will ich noch um eine dicke Warnung ergänzen:

        Lasse niemals zu, dass jemand eine Datei auf Dein System hochlädt und den Zielnamen selbst bestimmt. Du musst zumindest einige Dateitypen ausschließen. Stell Die mal vor, da lädt Dir eine Datei "DeleteAll.php" auf Dein System hoch. Der Name isart dabei sogar ganz unerheblich, er soll nur zum Ausdruck bringen, was die Datei so macht. Die Endung ist hier keinesfalls egal. Wenn Dein PHP-Parser auf alle Dateien mit den Endungen *.php, *.html, *.privat reagiert, dann solltest Du solche "Uploads" nicht zulassen.

        Zur Namensvergabe:

        $thefile Pfad und Name der Datei wie sie im Filesystem zu finden ist. (meistens in der Form /tmp/php234lksdaflk)

        $thefile_name Der Name der Datei, wie sie auf dem Clientsystem genannt wurde

        In "$thefile" steht der Name der temporären Datei auf dem System.
        In "$thefile_name" steht der Name der Datei auf dem Client. Aber nur dann, wenn die PHP-Version nicht zu neu ist. Da gibt es einen Bug. Musst hier mal im Forum nach "PHP-Version Bug" suchen.

        Lass Dir die Variablen mal mit "echo" ausgeben, dann weißt Du, ob sie richtig ankommen.

        Mit

        $rights = umask(0460);  // kann auch 0600 sinnvoll sein
        $OK = copy($thefile,$zielpfad.$thefile_name);
        if ($OK)
        {
          chgrp($zielpfad.$thefile_name,$NewGroupName); // neue Gruppe der Datei
        }

        kopierst Du die Datei dann an die passende Stelle.

        Eigentümer (u) der Datei wird immer der PHP-Deamon (wwwrun). Den kannst du nicht ändern. Die Gruppe kann und sollte sofort nach dem Kopieren angepasst werden, damit DU z.B. auch per ftp rankommst an die Datei.

        Die Rechte für others sollten immer auf 0 eingestellt werden.

        Wenn Du das jetzt nachbaust, müsste es klappen.

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

        Tom

        1. Hallo Tom

          Wow super werde ich mir gleich anschauen vielen Dank für die Super infos, bei meinem Upload muss man sich eh zuvor einloggen. deshalb können nur 2-3 Personen zu dem  Formular :o) also ist das mit den Dateien nicht sooo schlim..

          Danke für die Hilfe !!

          Gruss Marco