Erhard: Hochgeladene Datei überprüfen ob es sich um ein PDF handelt!

Wie kann ich überprüfen, ob eine hochgeladene Datei ein PDF ist?
Bei Bilder mache ich das mit getimagesize, gibt es so etwas ähnliches auch für pdf?

Erhard

  1. Lieber Erhard,

    vielleicht sind Dir die FileInfo-Funktionen in PHP eine Hilfe? Damit kannst Du einen MIME-Typ auslesen, dem Du dann ein bisschen vertrauen kannst.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Erhard,

      vielleicht sind Dir die FileInfo-Funktionen in PHP eine Hilfe? Damit kannst Du einen MIME-Typ auslesen, dem Du dann ein bisschen vertrauen kannst.

      Nachdem fileinfo stellenweise nicht sehr zuverlässig ist, kann man noch anderen indizien prüfen - für PDF-Files kann z.B. auch getimagesize() eingesetzt werden und dann einfach den Schlüssel "mime" prüfen.

      Zusätzlich kann man natürlich noch prüfen ob die Endung passt, aber die hat relativ wenig Aussagekraft.

      Man kann die ersten paar Zeichen des Files lesen und nach einer Markierung wie "%PDF-1.5" am Anfang suchen wobei das 1.5 in diesem Fall variable ist und für die Versionsnummer steht.

      Als letzte Möglichkeit bleibt noch im File nach Metadaten zu suchen - die liegen in PDFs die durch Adobe-Produkte erstellt wurden im XMP-Format vor. Da sollte sich ein XML-Schnipsel finden der nach einer Markierung am Ende des Files zu finden ist die etwa aussieht:

      <</Length 425151/Subtype/XML/Type/Metadata>>stream

      Danach kommen dann die XMP-Daten, da sollte es ein Element geben welches in etwa so aussieht:
      <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>

      Oder aber es ist ein Attribut in einem Description-Element im rdf-Namespace und sieht etwa so aus:

      <rdf:Description xmpMM:RenditionClass="proof:pdf" />

      Oder es ist ein Kind dieses Elements und sieht so aus:
      <dc:format>application/pdf</dc:format>