Fixes #15322: Fixed PHP 7.2 compatibility of FileHelper::getExtensionsByMimeType()

This commit is contained in:
Alexander Makarov
2017-12-10 16:31:42 +03:00
committed by GitHub
parent 23630abe6d
commit 1e00a050d7
6 changed files with 116 additions and 32 deletions

View File

@@ -34,6 +34,12 @@ class BaseFileHelper
*/
public static $mimeMagicFile = '@yii/helpers/mimeTypes.php';
/**
* @var string the path (or alias) of a PHP file containing MIME aliases.
* @since 2.0.14
*/
public static $mimeAliasesFile = '@yii/helpers/mimeAliases.php';
/**
* Normalizes a file/directory path.
@@ -189,6 +195,11 @@ class BaseFileHelper
*/
public static function getExtensionsByMimeType($mimeType, $magicFile = null)
{
$aliases = static::loadMimeAliases(static::$mimeAliasesFile);
if (isset($aliases[$mimeType])) {
$mimeType = $aliases[$mimeType];
}
$mimeTypes = static::loadMimeTypes($magicFile);
return array_keys($mimeTypes, mb_strtolower($mimeType, 'UTF-8'), true);
}
@@ -214,6 +225,28 @@ class BaseFileHelper
return self::$_mimeTypes[$magicFile];
}
private static $_mimeAliases = [];
/**
* Loads MIME aliases from the specified file.
* @param string $aliasesFile the path (or alias) of the file that contains MIME type aliases.
* If this is not set, the file specified by [[mimeAliasesFile]] will be used.
* @return array the mapping from file extensions to MIME types
* @since 2.0.14
*/
protected static function loadMimeAliases($aliasesFile)
{
if ($aliasesFile === null) {
$aliasesFile = static::$mimeAliasesFile;
}
$aliasesFile = Yii::getAlias($aliasesFile);
if (!isset(self::$_mimeAliases[$aliasesFile])) {
self::$_mimeAliases[$aliasesFile] = require $aliasesFile;
}
return self::$_mimeAliases[$aliasesFile];
}
/**
* Copies a whole directory as another one.
* The files and sub-directories will also be copied over.