Mike© : File upload - Prüfung ob die Datei lokal existiert

Moin @ All

cih habe mich jetzt einigermaßen erfolgreich durch das Kapitel File Upload gekämpft.

Wenn der Anwender den Button "Durchsuchen..." benutzt, dann sollte es keine Eingabefehler geben. Wird nun aber der Name der zu übetragenden Datei in das Textfeld eingegeben, wie kann ich dann überprüfen, ob diese Datei überhaupt lokal vorliegt?

Wenn das nicht geprüft werden kann, gibt es Alternativen?

Eine Fehlermeldung im Stil: "Die Datei wurde nicht erfolgreich übertragen" sagt ja nichts drüber aus, das hier ein Eingabfehler vorlag.

Danke & regds
Mike©

--
Freunde kommen und gehen. Feinde sammeln sich an.
  1. Hi,

    also, wenn Du prüfen willst, ob eine Datei beim User lokal vorhanden ist, mußt Du meines Erachtens Hacker-Qualitäten besitzen...
    ;)
    Aber Du kannst doch serverseitig bei der Validierung der Formulardaten einfach überprüfen, ob die hochgeladene Datei tatsächlich eine Datei ist oder ob die entsprechende POST-Variable gar null ist. Du kannst auch prüfen, ob die Datei bestimmten Anforderungen genügt.

    Vielleicht hilft Dir http://www.phpbuilder.com/columns/bealers20000904.php3?page=1 ein bißchen weiter?

    Ciao,
    Andreas

    1. Moin Andreas,

      Aber Du kannst doch serverseitig bei der Validierung der Formulardaten einfach überprüfen, ob die hochgeladene Datei tatsächlich eine Datei ist oder ob die entsprechende POST-Variable gar null ist. Du kannst auch prüfen, ob die Datei bestimmten Anforderungen genügt.

      Ja, das ist schon klar. Aber ich kann so nicht feststellen, dass der ursächliche Fehler ein Dateiname einer nicht existenten Datei war.

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.
      1. Hallo,

        Ja, das ist schon klar. Aber ich kann so nicht feststellen, dass der ursächliche Fehler ein Dateiname einer nicht existenten Datei war.

        Aber wenn der Besucher doch eine Datei von seiner Festplatte auswählt (über Browse..., anders geht es ja nicht), dann ist diese Datei doch zwangsläufig existent! Oder[1]?

        [1] Bitte beschreibe dein Problem exakter.

        Gruß
        Lachgas

        --
        Keine Verbesserung ist zu klein oder geringfügig, als dass man sie nicht durchführen sollte. (Adorno)
        1. Moin N2O,

          Aber wenn der Besucher doch eine Datei von seiner Festplatte auswählt (über Browse..., anders geht es ja nicht), dann ist diese Datei doch zwangsläufig existent! Oder[1]?

          [1] Bitte beschreibe dein Problem exakter.

          Genau das habe ich ja in meinem OP geschildert. Bei Auswahl über den "Durchsuchen..." Button keine Problem. Ader es steht ja das Eingabefeld (mit "Free Text") zur Verfügung, und um dieses Eingabefeld geht es mir!

          Ist das exakt genug?  ;-)

          regds
          Mike©

          --
          Freunde kommen und gehen. Feinde sammeln sich an.
          1. Hallo,

            Genau das habe ich ja in meinem OP geschildert. Bei Auswahl über den "Durchsuchen..." Button keine Problem. Ader es steht ja das Eingabefeld (mit "Free Text") zur Verfügung, und um dieses Eingabefeld geht es mir!

            Wie kannst du denn über ein <input type="text"> (das meinst du, oder?) eine Datei hochladen? Ist das nicht aus sicherheitstechnischen Gründen untersagt? Ich meine ja. Schließlich könnte ich diesem Eingabefeld über das value-Attribut eine Vorbelegung geben, was ja verhindert werden _muss_. (Sonst könnt ich mir ja mal eben jede x-beliebige Datei des Clients hochladen.)

            Gruß
            Lachgas

            --
            Keine Verbesserung ist zu klein oder geringfügig, als dass man sie nicht durchführen sollte. (Adorno)
            1. Moin N2O,

              Wie kannst du denn über ein <input type="text"> (das meinst du, oder?) eine Datei hochladen? Ist das nicht aus sicherheitstechnischen Gründen untersagt? Ich meine ja. Schließlich könnte ich diesem Eingabefeld über das value-Attribut eine Vorbelegung geben, was ja verhindert werden _muss_. (Sonst könnt ich mir ja mal eben jede x-beliebige Datei des Clients hochladen.)

              Vielleicht reden wir ja aneinander vorbei, aber INPUT TYPE="FILE"
              stellt standardmäßig ein Input Feld und den Durchsuchen Button zur Verfügung. In das Text Feld könnte ich ja einen falschen Dateinamen eintragen und abschicken.

              Das kann ich anscheinend nicht abfangen. Ich kann nur prüfen ob die Datei angekommen ist. Wenn sie nicht angekommen ist kann das verschiedene Fehlerquellen haben.

              Ich möchte aber dem Anwender sagen könnem" Die Datei, welche du senden möchtest, gibts gar net"

              regds
              Mike©

              --
              Freunde kommen und gehen. Feinde sammeln sich an.
            2. Hallo du da draußen,

              [input-file-Felder] Schließlich könnte ich diesem Eingabefeld über das value-Attribut eine Vorbelegung geben, was ja verhindert werden _muss_. (Sonst könnt ich mir ja mal eben jede x-beliebige Datei des Clients hochladen.)

              Nichts da. Im alten Sicherheitskonzept des Konquerors konnte zum Beispiel ein file-Feld problemlos mit value belegt werden. Nur sobald das Formular abgesandt wurde, kam eine Sicherheitsmeldung mit einer Liste aller Dateien und der Bestätigung, ob diese wirklich hochgeladen werden sollten. Ich glaube, dass die das mittlerweile rausgemacht haben. Schade eigentlich.

              Grüße von hier drinnen, aus Biberach an der Riss,
              Candid Dauth (Dogfish)

              --
              »Bismarck biss Mark, bis Mark Bismarck biss!«
              http://cdauth.net.tc/
              ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
              1. Hallo,

                Schade eigentlich.

                nö.

                Gruß
                Lachgas

                --
                Keine Verbesserung ist zu klein oder geringfügig, als dass man sie nicht durchführen sollte. (Adorno)
                1. Hallo du da draußen,

                  nö.

                  Warum? Ich fand jenes System sehr vorteilhaft. Zum Beispiel konnte ich value in Scripts zum Eigengebrauch sehr gut brauchen.

                  Jetzt ist es so, dass value nicht mehr angezeigt wird. Die Sicherheitsabfrage kommt trotzdem noch. Halte ich für sehr umständlich.

                  Grüße von hier drinnen, aus Biberach an der Riss,
                  Candid Dauth (Dogfish)

                  --
                  »Bismarck biss Mark, bis Mark Bismarck biss!«
                  http://cdauth.net.tc/
                  ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
    2. Hallo Andreas,

      Vielleicht hilft Dir http://www.phpbuilder.com/columns/bealers20000904.php3?page=1 ein bißchen weiter?

      von diese Artikel ist *dringend* abzuraten - der Autor mach so ziemlich alles falsch was man falsch machen kann:
       - keine Verwendung von $_FILES und $_SERVER
       - Verwendung des vom Browser übermittelten File-Types
       - copy() statt move_uploaded_file()
       - ereg() statt preg_match()

      Grüße aus Nürnberg
      Tobias

      1. Hallo du da draußen,

        • copy() statt move_uploaded_file()

        Habe ich das im PHP-Manual richtig verstanden, dass move_uploaded_file() gleich mitüberprüft, ob es sich um eine hochgeladene Datei handelt? Und wenn nein, welcher Unterschied besteht dann zu copy()?

        Grüße von hier drinnen, aus Biberach an der Riss,
        Candid Dauth (Dogfish)

        --
        »Bismarck biss Mark, bis Mark Bismarck biss!«
        http://cdauth.net.tc/
        ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
        1. Hallo Candid,

          • copy() statt move_uploaded_file()
            Habe ich das im PHP-Manual richtig verstanden, dass move_uploaded_file() gleich mitüberprüft, ob es sich um eine hochgeladene Datei handelt?

          ja, hast du - das Manual ist hier doch eigentlich auch eindeutig:
          <zitat quelle="Manual">
          Diese Funktion prüft, ob die mit filename bezeichnete Datei eine gültige Upload-Datei ist (d.h., dass sie mittels PHP's HTTP POST Upload-Mechanismus upgeloaded wurde).
          </zitat>
          (ja, in der deutschen Version steht das gleiche wie in der englischen)

          Grüße aus Nürnberg
          Tobias

  2. Moin!

    Wenn der Anwender den Button "Durchsuchen..." benutzt, dann sollte es keine Eingabefehler geben. Wird nun aber der Name der zu übetragenden Datei in das Textfeld eingegeben, wie kann ich dann überprüfen, ob diese Datei überhaupt lokal vorliegt?

    Kannst du nicht. Der Browser wird sich beschweren, wenn so eine Datei nicht existiert, oder du kriegst eben exakt null Bytes gesendet.

    Sofern die empfangene Datei nicht deinen Erwartungen entspricht, mußt du eben entsprechende Vermutungen zur Fehlerbehebung äußern. Könnte ja auch sein, dass irgendein Proxy beim User da was rausfiltert - ich habe mit Proxys schon die tollsten Geschichten erlebt.

    Eine Fehlermeldung im Stil: "Die Datei wurde nicht erfolgreich übertragen" sagt ja nichts drüber aus, das hier ein Eingabfehler vorlag.

    Die Datei wurde ja vielleicht erfolgreich übertragen - aber du kannst ja selbst mal ausprobieren, was dann so passiert und was bei dir ankommt - und dann deine Schlüsse draus ziehen.

    - Sven Rautenberg

    1. Moin Sven,

      Kannst du nicht. Der Browser wird sich beschweren, wenn so eine Datei nicht existiert, oder du kriegst eben exakt null Bytes gesendet.

      Also mein Browser hat sich nicht beschwert, aber er hat null Bytes nach der "Übertragung" gemeldet.

      Diese null Byte, müssen aber nicht zwangsläufig eine nicht lokal existende Datei zur Folge haben.

      Wie ich breits "leider" verumtet habe, ist also eine Prüfung auf lokale Existenz der Datei nicht machbar?

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.
      1. Moin!

        Also mein Browser hat sich nicht beschwert, aber er hat null Bytes nach der "Übertragung" gemeldet.

        Dateiname? Sonstige Metadaten? Wie waren die?

        Diese null Byte, müssen aber nicht zwangsläufig eine nicht lokal existende Datei zur Folge haben.

        Ist es nicht herzlich egal, ob du null Bytes einer nicht existenten Datei erhälst, oder Null Bytes einer existenten Datei, deren Inhalt nicht existiert? Das Resultat ist dasselbe: Du kannst mit der Datei nichts anfangen und mußt den Benutzer drauf hinweisen, dass das, was er gesendet hat, irgendwie Müll war, und er doch bitte nochmal alles prüfen möge.

        Wie ich breits "leider" verumtet habe, ist also eine Prüfung auf lokale Existenz der Datei nicht machbar?

        Absolut unmöglich. Sicherheitsbeschränkungen verhindern dies.

        - Sven Rautenberg

        1. Moin Sven,

          Dateiname? Sonstige Metadaten? Wie waren die?

          der Dateiname war wie er angegeben wurde, die Metadaten willkürlich "Text/Plain"  File size = 0

          Ist es nicht herzlich egal, ob du null Bytes einer nicht existenten Datei erhälst, oder Null Bytes einer existenten Datei, deren Inhalt nicht existiert? Das Resultat ist dasselbe: Du kannst

          Indeed, ich wollte eine eindeutige Fehlerursache angeben, nun muss ich wohl ein Liste der mögliche Fehler ausgeben.

          Dennoch weiß ich nun, das die Überprüfung auf die lokale Existenz nicht möglich ist. -Danke-

          regds
          Mike©

          --
          Freunde kommen und gehen. Feinde sammeln sich an.