4 года назад

Расширение стандартного списка Mime-Type в Yii Framework


Понадобилось расширить стандартный список миме-типов в Yii Framework.
Для этого создаём в папке конфигурации protected/config файл mimeTypes.php с таким содержанием:

protected/config/mimeTypes.php
<?php
$mimeTypes = require Yii::getPathOfAlias('system.utils.mimeTypes').'.php';

return array_merge($mimeTypes, array(
    'wbmp' => 'image/vnd.wap.wbmp',
    'mp4' => 'video/mp4',
    'apk' => 'application/vnd.android.package-archive',
    'jar' => 'application/java-archive',
    'sis' => 'application/vnd.symbian.install',
    'sisx' => 'x-epoc/x-sisx-app',
    'jad' => 'text/vnd.sun.j2me.app-descriptor; charset=UTF-8',
    'thm' => 'application/vnd.eri.thm',
    'nth' => 'application/vnd.nok-s40theme',
    'sdt' => 'application/vnd.siemens-mp.theme',
    'mpn' => 'application/vnd.mophun.application',
    'mpc' => 'application/vnd.mophun.certificate',
));
Здесь мы взяли стандартный список миме-типов Yii Framework и при помощи функции array_merge добавили в него массив недостающих миме-типов вида "расширение=>mime-type".

Теперь, чтобы применить наш список, нам необходимо указать его расположение при вызове статического метода CFileHelper::getMimeTypeByExtension.

Пример
<?php
$filename = 'bla/bla/bla/video.mp4';

$magicFile = Yii::getPathOfAlias('application.config.mimeTypes').'.php';
if (($mimeType = CFileHelper::getMimeTypeByExtension($filename, $magicFile)) === null) {
    $mimeType = 'application/octet-stream';
}

header("Content-Type: " . $mimeType);
readfile($filename);
exit;

// Пример использования вместе с sendFile
Yii::app()->request->sendFile(basename($filename), file_get_contents($filename), $mimeType);
Поделиться ссылкой:

comments powered by Disqus