Frage

I use libmagic to get the mime type of a file in a web interface of my project. I get text/plain mime type on css and js files.

For example chromium shows below warnings:

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost:8000/jquery-ui.css".
Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost:8000/jquery.timers.js".

Http dialog

alex@alex-laptop ~ $ nc localhost 8000
GET /ui.css HTTP/1.1


HTTP/1.1 200 OK
Connection: close
Content-Length: 699
Content-Type: text/plain; charset=us-ascii
Date: Wed, 19 Sep 2012 11:41:48 GMT

...

How can I fix this?

War es hilfreich?

Lösung

You'll need to do the same thing as Apache: consult a database of extensions for the MIME type, and, if you fail, consult libmagic.

Text and XML files are often too generic for libmagic to figure out. libmagic is only meant to determine a file type by examining a few bytes, so CSS and JavaScript are insufficiently distinct to determine their exact types. In the case of XML, libmagic would have to have fairly sophisticated rules to determine if a file was XHTML, SVG, XHTML+SVG, or an XSLT that produces XHTML and/or SVG. That's beyond its scope.

Andere Tipps

Not sure what you are doing to need this.

Normally you would know which files are what by extension, directory etc.

Easiest would be to check extension – but guess that, for some reason, is not an option.

You can make a custom function to parse and detect ecma and css:

if (mime==text/plain) { mime = my_parser(data); }

You can use a validator and check if it validates as css or js.

You can make your own magic pattern file where you test for what you want – rather error-prone tho;

For example (very simplified)…

File my.magic:

0        search/4096    =function\ 
>&0      search/128     =)
>>&0     search/128     ={              JavaScript
!:mime   application/javascript

0        search/4096    ={
>&0      search/512     =transition-    CSS3
!:mime   text/css

0        search/4096    ={
>&0      search/512     =background:    CSS
!:mime   text/css

0        search/4096    ={
>&0      search/512     =color:         CSS
!:mime   text/css

Then compile it:

$ file -C -m my.magic

And use:

$ file -im my.magic.mgc some_file
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top