PHP ile Yerel Dosyanın Mime Tipi (Content-type) belirlenmesi

1 Cevap php

Ben bir dosyanın mime türünü belirlemek için çalışıyorum. Ben birkaç yöntem denedim, ama tutarlı bir çıkış verir şey ile gelmedik. I $mime = mime_content_type($file) ve $mime = exec('file -bi ' . $file) denedim. Ben fotoğraf, CSS ve JavaScript kadar hizmet ediyorum.

Örnek mime_content_type() çıkışı:

  • jquery.min.js - metin / düz
  • editor.js - metin / düz
  • admin.css - metin / düz
  • controls.css - application / x-troff
  • logo.png - metin / düz

Örnek exec(...) çıkışı:

  • jquery.min.js - metin / düz; charset=us-ascii
  • editor.js - text / x-c + +; charset = us-ascii
  • admin.css - text / x-c; charset = us-ascii
  • controls.css - text / x-c; charset = us-ascii
  • logo.png - image / png

Burada görüldüğü gibi, sonuçları her yerde vardır.

My PHP version is 5.2.6


SOLUTION (Jacob sayesinde)

$mimetypes = array(
    'gif' => 'image/gif',
    'png' => 'image/png',
    'jpg' => 'image/jpg',
    'css' => 'text/css',
    'js' => 'text/javascript',
);
$path_parts = pathinfo($file);
if (array_key_exists($path_parts['extension'], $mimetypes)) {
    $mime = $mimetypes[$path_parts['extension']];
} else {
    $mime = 'application/octet-stream';
}

1 Cevap

The Fileinfo extension will do the job, if you're on >= 5.30

  • Komutları çalıştırmak zorunda önlemek için çalışmalısınız
  • mime_content_type PHP 5.30 önerilmiyor

Ne yazık ki <üzerinde iseniz 5.30, o zaman ben muhtemelen sadece kendim yazmak istiyorum, bu yukarıdaki işlevleri / komutları alıyoruz olandan çok daha güvenilir bulunuyor.

İşte bir örnek:

<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
    'js' => 'application/x-javascript'
    // any other extensions that you may be serving      
);

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
    $mime = $mimetypes[$ext];
} else {
    echo 'mime type not found';
}

?>