jochen: "file"-upload per php vorgaukeln

hallo,

ich habe ein cgi-script, an dass man auch bilder hochladen kann und zwar über das normale "file"-formular-element, sprich der user muss per hand eine datei auf der platte aussuchen.

gibt es eine möglichkeit, per php diesen upload genau in dem format (also mit den wohl nötigen steuerinfos) vorzunehmen, ohne dass das cgi das merkt? ich will nämlich die hochzuladenden dateien nicht vom user extra auswählen lassen, sondern den pfad+dateiname dynamisch erzeugen. doch aus sicherheitsgründen kann man auf <input type="file"> nicht zugreifen, d.h. ich kann kein value automatisch setzen lassen. da aber die übergabe eines reinen pfades als string durch ein text-input nicht ausreicht, müsste ich diesen upload-vorgang irgendwie selbst anschubbsen. leider habe ich keine ahnung, was mit diesem "file"-button alles noch mitübertragen wird, damit so ein upload überhaupt funktioniert ...

  1. hallo,

    gibt es eine möglichkeit, per php diesen upload genau in dem format (also mit den wohl nötigen steuerinfos) vorzunehmen, ohne dass das cgi das merkt? ich will nämlich die hochzuladenden dateien nicht vom user extra auswählen lassen, sondern den pfad+dateiname dynamisch erzeugen. doch aus sicherheitsgründen kann man auf <input type="file"> nicht zugreifen, d.h. ich kann kein value automatisch setzen lassen.

    Na und jetzt rate mal warum dem so ist :)

    da aber die übergabe eines reinen pfades als string durch ein text-input nicht ausreicht, müsste ich diesen upload-vorgang irgendwie selbst anschubbsen. leider habe ich keine ahnung, was mit diesem "file"-button alles noch mitübertragen wird, damit so ein upload überhaupt funktioniert ...

    Das kannst du leider nicht, der Browser übergibt nicht etwa nen Pfad oder so, den du abändern könntest, sondern schickt die Datei direkt mit.

    cu RFZ

    P.S. Die datei soll schon vom User stammen oder? Wenn sie von deinem PHP-Server stammen sollte, dann geht's schon.

    1. cu RFZ

      P.S. Die datei soll schon vom User stammen oder? Wenn sie von deinem PHP-Server stammen sollte, dann geht's schon.

      aber wie?
      ... naja, da ich mir das schon fast dachte mit den sicherheitsbestimmungen würde ich im notfall auch einen umweg machen: ich lasse die dateien (in dem fall sollen es bilder sein) automatisch aus einem festen verzeichnis auf der platte auf den server laden - und dann erst das cgi starten. aber das müsste dann irgendwie gesagt bekommen, dass es diese bilder auf dem server nehmen soll. das cgi selbst verschickt e-mails und soll eben diese bilder automatisch mitschicken.

      die entspr. stelle im perl-script, die eigentlich den user-datei-upload erwartet müsste folgende sein:

      if($FILE{'file-upload-01'}){
          if(!(-e("files/standard.file"))){
               open(W,">files/standard.file");
               flock(W,2) if($use_flock);
               print W "";
               flock(W,8) if($use_flock);
               close(W);
          }

      open(F,">files/$FILE{'file-upload-01'}");
          flock(F,2) if($use_flock);
          print F $FORM{'file-upload-01'};
          flock(F,8) if($use_flock);
          close(F);

      open(W,">>files/standard.file");
          flock(W,2) if($use_flock);
          print W "Content-type: $MIME{'file-upload-01'};\n" . " name="$FILE{'file-upload-01'}"\n";
          print W "Content-Transfer-Encoding: base64\n";
          print W "Content-ID: <$FILE{'file-upload-01'}>\n";
          print W 'Content-Disposition: attachment;' . " filename="$FILE{'file-upload-01'}"\n\n";
          &base64enc( W, "files/$FILE{'file-upload-01'}");
          print W "\n--$boundary\n";
          flock(W,8) if($use_flock);
          close(W);
          unlink("files/$FILE{'file-upload-01'}");
      }

      da ich von perl nur ansatzweise was weiss und im grunde nur von php/js auf ähnlichkeiten schliesse, meine ich, man müsste diesen teil irgendwie/wo umschreiben, dass er die bild-datei vom server nimmt, statt den user-upload zu erwarten .. aber wie? was müsste man hier ändern?

      kann mir wer helfen?

      gruß jochen

      1. ... naja, da ich mir das schon fast dachte mit den sicherheitsbestimmungen würde ich im notfall auch einen umweg machen: ich lasse die dateien (in dem fall sollen es bilder sein) automatisch aus einem festen verzeichnis auf der platte auf den server laden - und dann erst das cgi starten.

        Wie willst du das anstellen? Egal wie du den Upload bastelst, die User kommen nicht drum herum die Datei selbst auszuwählen! Du kannst kein festes Verzeichnis definieren.

        gruß jochen

        cu RFZ

  2. hallo,

    gibt es eine möglichkeit, per php diesen upload genau in dem format (also mit den wohl nötigen steuerinfos) vorzunehmen, ohne dass das cgi das merkt? ich will nämlich die hochzuladenden dateien nicht vom user extra auswählen lassen, sondern den pfad+dateiname dynamisch erzeugen. doch aus sicherheitsgründen kann man auf <input type="file"> nicht zugreifen, d.h. ich kann kein value automatisch setzen lassen.

    Wenn das ginge, dann könntest du zum Beispiel Dateien vom User runterladen, die wichtige Infos enthalten und immer am gleichen Ort gespeichert werden. Beispiel: (Sinngemäss) c:\programme\aol\config_wo_aol_passwort_drinsteht.ini

    Bei Opera ging das eine Zeitlang aber war ein fettes Sicherheitsloch. Daher gehts nicht mehr und sollte auch nicht so sein.

    // Joscha