Search code examples
phpapachemime

mime_content_type returning text/plain for css and js files only


I'm encountering this weird issue with PHP's mime_content_type, it works fine, except for CSS and JavaScript files, which it returns text/plain for (PHP's default mime is set to do text/html).

Modifying the mime.types file seems to make no difference (its path on httpd.conf is correct).

Examples

<?php
  echo(mime_content_type('index.html')); // returns text/html
  echo(mime_content_type('default.png')); // returns image/png
  echo(mime_content_type('bootstrap.min.js')); // returns text/plain
  echo(mime_content_type('css/animate.css')); // returns text/plain
  echo(mime_content_type('css/style.css')); // returns text/x-asm
?>

The same exact files served on the same exact Apache installation gets correctly marked on their Content-Type headers, it's almost as if PHP's using its mime detection mechanism.

I'm using Wamp 3.0.6 64-bit and the built-in PHP 7.0.10 on Windows 10 64-bit build 15063.483 mod_mime and mode_mime_magic are enabled.


Solution

  • The PHP doc is pretty explicit about that:

    Returns the MIME content type for a file as determined by using information from the magic.mime file.

    PHP and Apache don't use the same mime databases. Apache uses mime.types but PHP uses magic.mime (can't remember where it's located, /etc/ on a Unix system, I think)

    No sure how to edit it on Windows but here are some tips for Linux: How to create a custom magic file database