Mime_type .docx

#1
Guten morgen zusammen,

ich wollte mir gestern ein kleines Script in PHP basteln, welches mir Dateien zum Download anbietet die in einem Verzeichnis liegen.


der wesentliche Code dazu:

PHP:
$finfo = new finfo();
$type = $finfo->file($pfad, FILEINFO_MIME);

header("Content-Type: $type");
header("Content-Disposition: attachment; filename=\"$file\"");
readfile("$pfad);
Das funktioniert bei .pdf, .doc, .xls und soweiter - Allerdings nicht mit .docx (hier wird mir ein ZIP-Archiv angedreht :D - ja ich weiß dass es sich dabei tatsächlich um gezippte XMLs handelt :) )
Was mich verwirrt ist, dass er xlsx aber richtig erkennt!

Ich hab nen Apache2 unter Ubuntu 14.04 am laufen. Anscheinend soll der Apache unter Ubuntu und Debian auf die Datei /etc/mime.types zurückgreifen - dort sind aber die Extensions hinterlegt!
Ich würde das ungerne mit .htaccess-Files lösen, sondern möchte eine saubere globale Lösung!

Hat hierzu jemand schon Erfahrungen und kann mir da helfen? :)


Danke schonmal :)

Grüße
 
#3
Erstmal danke, ich hab mir deinen Link angeschaut - das hat leider nicht geholfen.
Ich habe auf der MS-Seite den folgenden Link gefunden
Office 2007 MIME types for Apache | Vlad Mazek – Vladville Blog

Allerdings hat das auch nichts geholfen,... die Formate sind bei mir bereits in der
/etc/mime.types hinterlegt ...

Code:
pplication/vnd.openxmlformats-officedocument.presentationml.presentation      pptx
application/vnd.openxmlformats-officedocument.presentationml.slide               sldx
application/vnd.openxmlformats-officedocument.presentationml.slideshow        ppsx
application/vnd.openxmlformats-officedocument.presentationml.template          potx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet               xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.template           xltx
application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template      dotx
xlsx nimmt er ja richtig - docx leider nicht! Den Rest ab ich noch nicht getestet.

Kleiner aber nicht unerheblicher Nachtrag:
.docx-Dateien, die mit LibreOffice generiert wurden, werden als ZIP deklariert,... die mit dem originalen Office generierten, werden korrekt ausgegeben!
Gibts dazu irgendwelche Infos?


Grüße
Selig
 
#5
Ja genau... Bei den .docx Dokumenten aus LibreOffice spuckt er es als ZIP aus...

Wenn ich das File mit WinRar öffne sieht es in der Content-XML auch geringfügig anders aus, als beim "echten" Office.
Bringt mir nur nichts xD
 

Chakky

Member of Honour
#6
Was ist der Hintergrund das auf korrekte Mimetypes angewiesen bist? Vielleicht findet man eine andere Lösung? Kann man ggf LibreOffice Dokumente noch anders erkennen und dann manuell den Mimetyp setzen?
 
#7
Ich möchte halt, dass der Browser einem gleich die korrekte Anwendung vorschlägt mit der man die Datei öffnen kann,....

Wenn ich z.B. application/octet-stream wähle, bietet mir der Browser nur "Datei Speichern" - klar besser als die falsche Anwendung, aber trotzdem :D
Ich möchte mich nur ungern auf die Dateiendung verlassen da ich möchte, dass Dateien hochgeladen werden können.
 
#9
Danke, ja ich glaub ich hab das alles entsprechend abgesichert - es wäre nur "hübscher" gewesen :D :D

Trotzdem danke,

vll mach ich für die LibreOffice Geschichte ein kleines Workaround im Code :)

Danke
 
#11
Also ich habe im Netz was gefunden, womit das ganze mit Magic gemacht werden kann
validation - DOCX File type in PHP finfo_file is application/zip - Stack Overflow

Werde es aufgrund meiner momentanen Faulheit in PHP machen

Nachdem ich das MimeType Ergebnis von finfo() habe, prüfe ich ob der gelieferte Wert "application/zip" ist und die Dateiendung .docx
entsprechend werde ich den Mime-Type dann auf "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ändern - nicht schön, müsste aber gehen :D

Natürlich wäre es mit Magic schöner, aber aktuell hab ich keine Motivation (Nachtschicht gehabt xD )


Grüße
 
Oben