Regenbogenjonny: Fileupload

Hallo,

beim Upload eines PDF wird mir seltsamerweise die Meldung ausgegeben, dass diese eine "application/x-octet-stream" Datei wäre.

Das stimmt aber gar nicht mit der Liste aus dem Link hier überein. Hier wird gesagt, dass dieser Mimetyp einer ausführbaren Datei entspricht.

Was tun?

Wenn ich den Mimetyp freigebe, gebe ich auch ausführbare Dateien frei, ich will aber nur PDFs freigeben.

Jonny

  1. Tach,

    beim Upload eines PDF wird mir seltsamerweise die Meldung ausgegeben, dass diese eine "application/x-octet-stream" Datei wäre.

    Das stimmt aber gar nicht mit der Liste aus dem Link hier überein. Hier wird gesagt, dass dieser Mimetyp einer ausführbaren Datei entspricht.

    Das stimmt nicht so ganz; habe es im Wiki gerade angepasst; x-octet-stream ist einfach nur eine Binärdatei, das kann ein Programm sein, aber auch etwas ganz anderes und wird im zweifelsfall als Fallback verwendet.

    Was tun?

    Ich gehe davon aus, dass PHP da nach Magic Numbers u.ä. schaut und die Datei nicht mit dem für PDF vorgeschriebenen Header „%PDF“ beginnt (das kann man z.B. mit einem Hexeditor nachschauen (25 50 44 46 sollte der Beginn der Datei sein)); je nach PDF-Anzeigeprogramm kann man die Datei dann auch noch ansehen, aber im Prinzip ist sie kaputt.

    mfg
    Woodfighter

    1. Hi,

      beim Upload eines PDF wird mir seltsamerweise die Meldung ausgegeben, dass diese eine "application/x-octet-stream" Datei wäre.

      Das stimmt aber gar nicht mit der Liste aus dem Link hier überein. Hier wird gesagt, dass dieser Mimetyp einer ausführbaren Datei entspricht.

      Das stimmt nicht so ganz; habe es im Wiki gerade angepasst; x-octet-stream

      application/octet-stream. Kein x-.

      cu,
      Andreas a/k/a MudGuard

      1. Das stimmt nicht so ganz; habe es im Wiki gerade angepasst; x-octet-stream

        application/octet-stream. Kein x-.

        Na, bei mir aber eben wohl mit x. Ich habs gesehen, im Wiki ohne... aber bei mir kommts inkl. dem X

        Jonny

  2. Tach!

    beim Upload eines PDF wird mir seltsamerweise die Meldung ausgegeben, dass diese eine "application/x-octet-stream" Datei wäre.

    Wie hat man sich das genau vorzustellen? Bei mir hat die Natur keine Upload-Möglichkeit vorgesehen ...

    Oder ernsthafter: Du musst schon etwas mehr Worte verlieren, mit welchen Systemen du konkret was versuchst. "bei mir" ist nicht ausreichend, um dir eine fundierte Antwort geben zu können.

    dedlfix.

    1. Oder ernsthafter: Du musst schon etwas mehr Worte verlieren, mit welchen Systemen du konkret was versuchst. "bei mir" ist nicht ausreichend, um dir eine fundierte Antwort geben zu können.

      Hi dedlfix.

      hast ja recht.

      Ich lade per php-form etwas hoch und durchsuche dann das $_FILE Array.

      <form action="script.php" method="post" enctype="multipart/form-data" accept-charset="utf-8">
      

      und dann

      $lenght = count($_FILES['files']['name']);
      
      for($i = 0; $i < $lenght; $i++) {
      if ( $_FILES['files']['name'][$i]  <> "" )
      {
      $zugelassenedateitypen = array("image/png", "image/jpeg", "image/gif", "application/save");
      
          if ( ! in_array( $_FILES['files']['type'][$i] , $zugelassenedateitypen ))
          {
              echo "<p>Dateitype (".$_FILES['files']['type'][$i].") ist NICHT zugelassen</p>";
          }
      

      Jonny

      1. Tach!

        Ich lade per php-form etwas hoch und durchsuche dann das $_FILE Array.

        Dann bekommst du das zu sehen, was der Browser dir vorschwindelt. Schau lieber selbst mit fileinfo nach.

        dedlfix.

        1. Tach!

          Ich lade per php-form etwas hoch und durchsuche dann das $_FILE Array.

          Dann bekommst du das zu sehen, was der Browser dir vorschwindelt. Schau lieber selbst mit fileinfo nach.

          Ist wahr? Der Browser macht das? Oweh.

          Ich schau mal in fileinfo rein... hat php 5.5 das serienmäßig drin?

          Jonny

          1. Dann bekommst du das zu sehen, was der Browser dir vorschwindelt. Schau lieber selbst mit fileinfo nach.

            Hm... werd' ich nicht ganz schlau draus. Ich würde gerne die Funktion "mime_content_type" hieraus nutzen, aber die Doku sagt, sie sei veraltet und linkt mich auf die Fileinfo Funktionen. In denen finde ich dann wieder das, was ich anwenden würden, nämlich die Funktion "mime_content_type". Ich dreh' mich also im Kreis, oder?

            Jonny

            1. Tach!

              Ich würde gerne die Funktion "mime_content_type" hieraus nutzen, aber die Doku sagt, sie sei veraltet und linkt mich auf die Fileinfo Funktionen. In denen finde ich dann wieder das, was ich anwenden würden, nämlich die Funktion "mime_content_type".

              Du musst die anderen Funktionen daraus nehmen, oder die objektorientierte Variante:

              $finfo = new finfo(FILEINFO_MIME);
              $mimeType = $finfo->file($filename);
              

              dedlfix.

              1. Hi dedlfix,

                Du musst die anderen Funktionen daraus nehmen, oder die objektorientierte Variante:

                $finfo = new finfo(FILEINFO_MIME);
                $mimeType = $finfo->file($filename);
                

                Danke für Deine Hilfe. Muß ich morgen machen, heut' raff ich nicht mehr wirklich viel :-/

                    $finfo = new finfo(FILEINFO_MIME);
                    $mimeType = $finfo->file($_FILES['files']['name'][$i]);
                    
                    echo("<br>23:15:02: ----> ".$mimeType."<br>");
                

                hat mir lediglich

                23:15:02: ---->

                ausgespuckt :-(

                Liegt vielleicht an der Uhrzeit...

                Jonny

                1. Tach!

                      $mimeType = $finfo->file($_FILES['files']['name'][$i]);
                  

                  Der Dateiname der temporären Datei (inklusive Pfad zu ihr) steht in tmp_name. name ist nur der Name der Datei, wie der Browser ihn mitschickt und verweist (hoffentlich) nicht auf eine bei dir existierende Datei.

                  dedlfix.

                  1. Der Dateiname der temporären Datei (inklusive Pfad zu ihr) steht in tmp_name. name ist nur der Name der Datei, wie der Browser ihn mitschickt und verweist (hoffentlich) nicht auf eine bei dir existierende Datei.

                    Hi dedlfix.

                    Natürlich. Da hätt' ich drauf kommen sollen. Danke. Und nein, name verweist nicht auf eine existierende Datei. Ich will ja gerade im Zwischenschritt zum Kopieren aus dem temp-Verzeichniss in ein Verzeichniss unterhalb des htdocs die Prüfung durchführen.

                    Also meine Reihenfolge: Upload --> tmp_verz --> Prüfung --> move_uploaded_file

                    Jonny

                    1. Lieber Regenbogenjonny,

                      und? Zeigt Dir PHP jetzt den MIME-Typ "application/pdf" an, oder nicht?

                      Liebe Grüße,

                      Felix Riesterer.

                      1. Hallo Felix,

                        ja, jetzt erhalte ich

                        12:15:02: ----> application/pdf; charset=binary

                        als Ausgabe.

                        Jonny