0 关注者

类 yii\helpers\BaseFileHelper

继承关系yii\helpers\BaseFileHelper
子类yii\helpers\FileHelper
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseFileHelper.php

BaseFileHelper 为 yii\helpers\FileHelper 提供具体实现。

不要使用 BaseFileHelper。请改用 yii\helpers\FileHelper

公有属性

隐藏继承属性

属性 类型 描述 定义于
$mimeAliasesFile string 包含 MIME 别名的 PHP 文件的路径(或别名)。 yii\helpers\BaseFileHelper
$mimeExtensionsFile string 包含每个 MIME 类型扩展名的 PHP 文件的路径(或别名)。 yii\helpers\BaseFileHelper
$mimeMagicFile string 包含 MIME 类型信息的 PHP 文件的路径(或别名)。 yii\helpers\BaseFileHelper

公有方法

隐藏继承方法

方法 描述 定义于
changeOwnership() 更改文件或目录的 Unix 用户和/或组所有权,以及可选的模式。 yii\helpers\BaseFileHelper
copyDirectory() 将整个目录复制为另一个目录。 yii\helpers\BaseFileHelper
createDirectory() 创建一个新目录。 yii\helpers\BaseFileHelper
filterPath() 检查给定的文件路径是否满足过滤选项。 yii\helpers\BaseFileHelper
findDirectories() 返回在指定目录及其子目录下找到的目录。 yii\helpers\BaseFileHelper
findFiles() 返回在指定目录及其子目录下找到的文件。 yii\helpers\BaseFileHelper
getExtensionByMimeType() 根据给定的 MIME 类型确定最常见的扩展名。 yii\helpers\BaseFileHelper
getExtensionsByMimeType() 根据给定的 MIME 类型确定扩展名。 yii\helpers\BaseFileHelper
getMimeType() 确定指定文件的 MIME 类型。 yii\helpers\BaseFileHelper
getMimeTypeByExtension() 根据指定文件的扩展名确定 MIME 类型。 yii\helpers\BaseFileHelper
localize() 返回指定文件的本地化版本。 yii\helpers\BaseFileHelper
normalizePath() 规范化文件/目录路径。 yii\helpers\BaseFileHelper
removeDirectory() 递归删除目录(及其所有内容)。 yii\helpers\BaseFileHelper
unlink() 以跨平台的方式删除文件或符号链接 yii\helpers\BaseFileHelper

受保护方法

隐藏继承方法

方法 描述 定义于
loadMimeAliases() 从指定文件加载 MIME 别名。 yii\helpers\BaseFileHelper
loadMimeExtensions() 从指定文件加载 MIME 扩展名。 yii\helpers\BaseFileHelper
loadMimeTypes() 从指定文件加载 MIME 类型。 yii\helpers\BaseFileHelper
normalizeOptions() yii\helpers\BaseFileHelper

常量

隐藏继承常量

常量 描述 定义于
PATTERN_CASE_INSENSITIVE 32 yii\helpers\BaseFileHelper
PATTERN_ENDSWITH 4 yii\helpers\BaseFileHelper
PATTERN_MUSTBEDIR 8 yii\helpers\BaseFileHelper
PATTERN_NEGATIVE 16 yii\helpers\BaseFileHelper
PATTERN_NODIR 1 yii\helpers\BaseFileHelper

属性详情

隐藏继承属性

$mimeAliasesFile 公有静态属性 (自版本 2.0.14 起可用)

包含 MIME 别名的 PHP 文件的路径(或别名)。

public static string $mimeAliasesFile '@yii/helpers/mimeAliases.php'
$mimeExtensionsFile 公有静态属性 (自版本 2.0.48 起可用)

包含每个 MIME 类型扩展名的 PHP 文件的路径(或别名)。

public static string $mimeExtensionsFile '@yii/helpers/mimeExtensions.php'
$mimeMagicFile 公有静态属性

包含 MIME 类型信息的 PHP 文件的路径(或别名)。

public static string $mimeMagicFile '@yii/helpers/mimeTypes.php'

方法详情

隐藏继承方法

changeOwnership() 公有静态方法 (自版本 2.0.43 起可用)

更改文件或目录的 Unix 用户和/或组所有权,以及可选的模式。

注意:此函数不适用于远程文件,因为要检查的文件必须通过服务器的文件系统访问。注意:在 Windows 上,此函数在应用于普通文件时会静默失败。

public static void changeOwnership ( $path, $ownership, $mode null )
$path string

文件或目录的路径。

$ownership string|array|integer|null

文件或目录的用户和/或组所有权。当 $ownership 是字符串时,格式为 'user:group',其中两者都是可选的。例如 'user' 或 'user:' 只会更改用户,':group' 只会更改组,'user:group' 会更改两者。当 $owners 是索引数组时,格式为 [0 => user, 1 => group],例如 [$myUser, $myGroup]。也可以传递关联数组,例如 ['user' => $myUser, 'group' => $myGroup]。如果 $owners 是整数,则将其用作用户 ID。如果传递 null、空数组或空字符串,则不会更改所有权。

$mode integer|null

要为文件或目录设置的权限。如果传递 null,则不会更改模式。

                public static function changeOwnership($path, $ownership, $mode = null)
{
    if (!file_exists((string)$path)) {
        throw new InvalidArgumentException('Unable to change ownership, "' . $path . '" is not a file or directory.');
    }
    if (empty($ownership) && $ownership !== 0 && $mode === null) {
        return;
    }
    $user = $group = null;
    if (!empty($ownership) || $ownership === 0 || $ownership === '0') {
        if (is_int($ownership)) {
            $user = $ownership;
        } elseif (is_string($ownership)) {
            $ownerParts = explode(':', $ownership);
            $user = $ownerParts[0];
            if (count($ownerParts) > 1) {
                $group = $ownerParts[1];
            }
        } elseif (is_array($ownership)) {
            $ownershipIsIndexed = ArrayHelper::isIndexed($ownership);
            $user = ArrayHelper::getValue($ownership, $ownershipIsIndexed ? 0 : 'user');
            $group = ArrayHelper::getValue($ownership, $ownershipIsIndexed ? 1 : 'group');
        } else {
            throw new InvalidArgumentException('$ownership must be an integer, string, array, or null.');
        }
    }
    if ($mode !== null) {
        if (!is_int($mode)) {
            throw new InvalidArgumentException('$mode must be an integer or null.');
        }
        if (!chmod($path, $mode)) {
            throw new Exception('Unable to change mode of "' . $path . '" to "0' . decoct($mode) . '".');
        }
    }
    if ($user !== null && $user !== '') {
        if (is_numeric($user)) {
            $user = (int) $user;
        } elseif (!is_string($user)) {
            throw new InvalidArgumentException('The user part of $ownership must be an integer, string, or null.');
        }
        if (!chown($path, $user)) {
            throw new Exception('Unable to change user ownership of "' . $path . '" to "' . $user . '".');
        }
    }
    if ($group !== null && $group !== '') {
        if (is_numeric($group)) {
            $group = (int) $group;
        } elseif (!is_string($group)) {
            throw new InvalidArgumentException('The group part of $ownership must be an integer, string or null.');
        }
        if (!chgrp($path, $group)) {
            throw new Exception('Unable to change group ownership of "' . $path . '" to "' . $group . '".');
        }
    }
}

            
copyDirectory() 公有静态方法

将整个目录复制为另一个目录。

文件和子目录也将被复制。

public static void copyDirectory ( $src, $dst, $options = [] )
$src string

源目录

$dst string

目标目录

$options array

目录复制选项。有效的选项包括

  • dirMode: 整数,为新复制的目录设置的权限。默认为 0775。
  • fileMode: 整数,为新复制的文件设置的权限。默认为当前环境设置。
  • filter: 回调函数,一个 PHP 回调函数,在复制每个目录或文件时调用。回调函数的签名应为:function ($path),其中$path指的是要过滤的完整路径。回调函数可以返回以下值之一

    • true: 目录或文件将被复制(“only”和“except”选项将被忽略)
    • false: 目录或文件将不会被复制(“only”和“except”选项将被忽略)
    • null: “only”和“except”选项将决定是否应该复制目录或文件
  • only: 数组,如果要复制文件路径,则应匹配的模式列表。如果路径在其末尾包含模式字符串,则与模式匹配。例如,'.php' 匹配所有以 '.php' 结尾的文件路径。注意,模式中的 '/' 字符匹配路径中的 '/' 和 '\'。如果文件路径在“only”和“except”中都匹配某个模式,则它将不会被复制。
  • except: 数组,如果要排除的文件或目录应匹配的模式列表。如果路径在其末尾包含模式字符串,则与模式匹配。以 '/' 结尾的模式仅适用于目录路径,而不以 '/' 结尾的模式仅适用于文件路径。例如,'/a/b' 匹配所有以 '/a/b' 结尾的文件路径;'.svn/' 匹配以 '.svn' 结尾的目录路径。注意,模式中的 '/' 字符匹配路径中的 '/' 和 '\'。
  • caseSensitive: 布尔值,指定在“only”或“except”中指定的模式是否区分大小写。默认为 true。
  • recursive: 布尔值,是否也复制子目录下的文件。默认为 true。
  • beforeCopy: 回调函数,在复制每个子目录或文件之前调用的 PHP 回调函数。如果回调函数返回 false,则取消该子目录或文件的复制操作。回调函数的签名应为:function ($from, $to),其中$from是要从中复制的子目录或文件,而$to是复制目标。
  • afterCopy: 回调函数,在成功复制每个子目录或文件后调用的 PHP 回调函数。回调函数的签名应为:function ($from, $to),其中$from是要从中复制的子目录或文件,而$to是复制目标。
  • copyEmptyDirectories: 布尔值,是否复制空目录。将其设置为 false 以避免创建不包含文件的目录。这会影响最初不包含文件的目录,以及由于通过onlyexcept过滤文件而目标位置不包含文件的目录。默认为 true。此选项自版本 2.0.12 起可用。在 2.0.12 之前,始终复制空目录。
抛出 yii\base\InvalidArgumentException

如果无法打开目录

                public static function copyDirectory($src, $dst, $options = [])
{
    $src = static::normalizePath($src);
    $dst = static::normalizePath($dst);
    if ($src === $dst || strpos($dst, $src . DIRECTORY_SEPARATOR) === 0) {
        throw new InvalidArgumentException('Trying to copy a directory to itself or a subdirectory.');
    }
    $dstExists = is_dir($dst);
    if (!$dstExists && (!isset($options['copyEmptyDirectories']) || $options['copyEmptyDirectories'])) {
        static::createDirectory($dst, isset($options['dirMode']) ? $options['dirMode'] : 0775, true);
        $dstExists = true;
    }
    $handle = opendir($src);
    if ($handle === false) {
        throw new InvalidArgumentException("Unable to open directory: $src");
    }
    if (!isset($options['basePath'])) {
        // this should be done only once
        $options['basePath'] = realpath($src);
        $options = static::normalizeOptions($options);
    }
    while (($file = readdir($handle)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $from = $src . DIRECTORY_SEPARATOR . $file;
        $to = $dst . DIRECTORY_SEPARATOR . $file;
        if (static::filterPath($from, $options)) {
            if (isset($options['beforeCopy']) && !call_user_func($options['beforeCopy'], $from, $to)) {
                continue;
            }
            if (is_file($from)) {
                if (!$dstExists) {
                    // delay creation of destination directory until the first file is copied to avoid creating empty directories
                    static::createDirectory($dst, isset($options['dirMode']) ? $options['dirMode'] : 0775, true);
                    $dstExists = true;
                }
                copy($from, $to);
                if (isset($options['fileMode'])) {
                    @chmod($to, $options['fileMode']);
                }
            } else {
                // recursive copy, defaults to true
                if (!isset($options['recursive']) || $options['recursive']) {
                    static::copyDirectory($from, $to, $options);
                }
            }
            if (isset($options['afterCopy'])) {
                call_user_func($options['afterCopy'], $from, $to);
            }
        }
    }
    closedir($handle);
}

            
createDirectory() 公共静态方法

创建一个新目录。

此方法类似于 PHP mkdir() 函数,不同之处在于它使用 chmod() 设置创建目录的权限,以避免 umask 设置的影响。

public static boolean createDirectory ( $path, $mode 0775, $recursive true )
$path string

要创建的目录的路径。

$mode 整数

为创建的目录设置的权限。

$recursive 布尔值

如果父目录不存在,是否创建它们。

返回值 布尔值

目录是否成功创建

抛出 yii\base\Exception

如果无法创建目录(例如,由于并行更改导致的 php 错误)

                public static function createDirectory($path, $mode = 0775, $recursive = true)
{
    if (is_dir($path)) {
        return true;
    }
    $parentDir = dirname($path);
    // recurse if parent dir does not exist and we are not at the root of the file system.
    if ($recursive && !is_dir($parentDir) && $parentDir !== $path) {
        static::createDirectory($parentDir, $mode, true);
    }
    try {
        if (!mkdir($path, $mode)) {
            return false;
        }
    } catch (\Exception $e) {
        if (!is_dir($path)) {// https://github.com/yiisoft/yii2/issues/9288
            throw new \yii\base\Exception("Failed to create directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);
        }
    }
    try {
        return chmod($path, $mode);
    } catch (\Exception $e) {
        throw new \yii\base\Exception("Failed to change permissions for directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);
    }
}

            
filterPath() 公共静态方法

检查给定的文件路径是否满足过滤选项。

public static boolean filterPath ( $path, $options )
$path string

要检查的文件或目录的路径

$options array

过滤选项。有关支持的选项的说明,请参见 findFiles()

返回值 布尔值

文件或目录是否满足过滤选项。

                public static function filterPath($path, $options)
{
    if (isset($options['filter'])) {
        $result = call_user_func($options['filter'], $path);
        if (is_bool($result)) {
            return $result;
        }
    }
    if (empty($options['except']) && empty($options['only'])) {
        return true;
    }
    $path = str_replace('\\', '/', $path);
    if (
        !empty($options['except'])
        && ($except = self::lastExcludeMatchingFromList($options['basePath'], $path, $options['except'])) !== null
    ) {
        return $except['flags'] & self::PATTERN_NEGATIVE;
    }
    if (!empty($options['only']) && !is_dir($path)) {
        return self::lastExcludeMatchingFromList($options['basePath'], $path, $options['only']) !== null;
    }
    return true;
}

            
findDirectories() 公共静态方法(自版本 2.0.14 起可用)

返回在指定目录及其子目录下找到的目录。

public static array findDirectories ( $dir, $options = [] )
$dir string

将在其中查找文件的目录。

$options array

目录搜索选项。有效的选项包括

  • filter: 回调函数,一个 PHP 回调函数,在复制每个目录或文件时调用。回调函数的签名应为:function (string $path): bool,其中$path指的是要过滤的完整路径。回调函数可以返回以下值之一

    • true: 将返回目录
    • false: 将不会返回目录
  • recursive: 布尔值,是否也查找子目录下的文件。默认为 true。有关更多选项,请参见 findFiles()

返回值 array

在目录下找到的目录,没有特定顺序。排序取决于使用的文件系统。

抛出 yii\base\InvalidArgumentException

如果 dir 无效。

                public static function findDirectories($dir, $options = [])
{
    $dir = self::clearDir($dir);
    $options = self::setBasePath($dir, $options);
    $list = [];
    $handle = self::openDir($dir);
    while (($file = readdir($handle)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        if (is_dir($path) && static::filterPath($path, $options)) {
            $list[] = $path;
            if (!isset($options['recursive']) || $options['recursive']) {
                $list = array_merge($list, static::findDirectories($path, $options));
            }
        }
    }
    closedir($handle);
    return $list;
}

            
findFiles() 公共静态方法

返回在指定目录及其子目录下找到的文件。

public static array findFiles ( $dir, $options = [] )
$dir string

将在其中查找文件的目录。

$options array

文件搜索选项。有效的选项包括

  • filter: 回调函数,一个 PHP 回调函数,在复制每个目录或文件时调用。回调函数的签名应为:function ($path),其中$path指的是要过滤的完整路径。回调函数可以返回以下值之一

    • true: 目录或文件将被返回(onlyexcept选项将被忽略)
    • false: 目录或文件将不会被返回(onlyexcept选项将被忽略)
    • null: onlyexcept选项将决定是否应该返回目录或文件
  • except: 数组,排除结果中匹配的文件或目录路径的模式列表。以斜杠 ('/') 结尾的模式仅适用于目录路径,而不以 '/' 结尾的模式仅适用于文件路径。例如,'/a/b' 匹配所有以 '/a/b' 结尾的文件路径;.svn/ 匹配以 .svn 结尾的目录路径。如果模式不包含斜杠 (/),则将其视为 shell 通配符模式,并检查其与相对于 $dir 的路径名的匹配情况。否则,该模式将被视为适合由 fnmatch(3) 使用 FNM_PATHNAME 标志使用的 shell 通配符:模式中的通配符将不会匹配路径名中的 /。例如,views/*.php 匹配 views/index.php 但不匹配 views/controller/index.php。前导斜杠匹配路径名的开头。例如,/*.php 匹配 index.php 但不匹配 views/start/index.php。可选的前缀 ! 用于否定模式;任何与先前模式排除的文件匹配的文件将再次包含在内。如果否定模式匹配,则这将覆盖较低优先级的模式源。在开头为文字 ! 的模式前加一个反斜杠 (\),例如 \!important!.txt。注意,模式中的 '/' 字符匹配路径中的 '/' 和 '\'。您可以在此处找到有关 gitignore 模式格式的更多详细信息。
  • only: 数组,如果要返回文件路径,则应匹配的模式列表。目录路径不会针对它们进行检查。使用与 except 选项相同的模式匹配规则。如果文件路径在 onlyexcept 中都匹配某个模式,则它将不会被返回。
  • caseSensitive: 布尔值,指定在 onlyexcept 中指定的模式是否区分大小写。默认为 true
  • recursive: 布尔值,是否也查找子目录下的文件。默认为 true
返回值 array

在目录下找到的文件,没有特定顺序。排序取决于使用的文件系统。

抛出 yii\base\InvalidArgumentException

如果 dir 无效。

                public static function findFiles($dir, $options = [])
{
    $dir = self::clearDir($dir);
    $options = self::setBasePath($dir, $options);
    $list = [];
    $handle = self::openDir($dir);
    while (($file = readdir($handle)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        if (static::filterPath($path, $options)) {
            if (is_file($path)) {
                $list[] = $path;
            } elseif (is_dir($path) && (!isset($options['recursive']) || $options['recursive'])) {
                $list = array_merge($list, static::findFiles($path, $options));
            }
        }
    }
    closedir($handle);
    return $list;
}

            
getExtensionByMimeType() 公共静态方法(自版本 2.0.48 起可用)

根据给定的 MIME 类型确定最常见的扩展名。

此方法将使用 MIME 类型和扩展名之间的本地映射。

public static 字符串|null getExtensionByMimeType ( $mimeType, $preferShort false, $magicFile null )
$mimeType string

文件 MIME 类型。

$preferShort 布尔值

返回最多 3 个字符的扩展名。

$magicFile 字符串|null

包含所有可用 MIME 类型信息的的文件路径(或别名)。如果未设置,则将使用 $mimeMagicFile 指定的文件。

返回值 字符串|null

与指定 MIME 类型对应的扩展名

                public static function getExtensionByMimeType($mimeType, $preferShort = false, $magicFile = null)
{
    $aliases = static::loadMimeAliases(static::$mimeAliasesFile);
    if (isset($aliases[$mimeType])) {
        $mimeType = $aliases[$mimeType];
    }
    $mimeExtensions = static::loadMimeExtensions($magicFile);
    if (!array_key_exists($mimeType, $mimeExtensions)) {
        return null;
    }
    $extensions = $mimeExtensions[$mimeType];
    if (is_array($extensions)) {
        if ($preferShort) {
            foreach ($extensions as $extension) {
                if (mb_strlen($extension, 'UTF-8') <= 3) {
                    return $extension;
                }
            }
        }
        return $extensions[0];
    } else {
        return $extensions;
    }
}

            
getExtensionsByMimeType() 公共静态方法

根据给定的 MIME 类型确定扩展名。

此方法将使用扩展名和 MIME 类型之间的本地映射。

public static 数组 getExtensionsByMimeType ( $mimeType, $magicFile null )
$mimeType string

文件 MIME 类型。

$magicFile 字符串|null

包含所有可用 MIME 类型信息的的文件路径(或别名)。如果未设置,则将使用 $mimeMagicFile 指定的文件。

返回值 array

与指定 MIME 类型对应的扩展名

                public static function getExtensionsByMimeType($mimeType, $magicFile = null)
{
    $aliases = static::loadMimeAliases(static::$mimeAliasesFile);
    if (isset($aliases[$mimeType])) {
        $mimeType = $aliases[$mimeType];
    }
    // Note: For backwards compatibility the "MimeTypes" file is used.
    $mimeTypes = static::loadMimeTypes($magicFile);
    return array_keys($mimeTypes, mb_strtolower($mimeType, 'UTF-8'), true);
}

            
getMimeType() 公共静态方法

确定指定文件的 MIME 类型。

此方法将首先尝试根据 finfo_open 确定 MIME 类型。如果未安装 fileinfo 扩展,则当 $checkExtension 为 true 时,它将回退到 getMimeTypeByExtension()

public static 字符串|null getMimeType ( $file, $magicFile null, $checkExtension true )
$file string

文件名。

$magicFile 字符串|null

可选的 magic 数据库文件(或别名)的名称,通常类似于 /path/to/magic.mime。当安装了 fileinfo 扩展时,这将作为第二个参数传递给 finfo_open()。如果 MIME 类型是通过 getMimeTypeByExtension() 确定的,并且该值为 null,则它将使用 $mimeMagicFile 指定的文件。

$checkExtension 布尔值

如果 finfo_open() 无法确定 MIME 类型,是否使用文件扩展名来确定 MIME 类型。

返回值 字符串|null

MIME 类型(例如 text/plain)。如果无法确定 MIME 类型,则返回 Null。

抛出 yii\base\InvalidConfigException

当未安装 fileinfo PHP 扩展并且 $checkExtensionfalse 时。

                public static function getMimeType($file, $magicFile = null, $checkExtension = true)
{
    if ($magicFile !== null) {
        $magicFile = Yii::getAlias($magicFile);
    }
    if (!extension_loaded('fileinfo')) {
        if ($checkExtension) {
            return static::getMimeTypeByExtension($file, $magicFile);
        }
        throw new InvalidConfigException('The fileinfo PHP extension is not installed.');
    }
    $info = finfo_open(FILEINFO_MIME_TYPE, $magicFile);
    if ($info) {
        $result = finfo_file($info, $file);
        finfo_close($info);
        if ($result !== false) {
            return $result;
        }
    }
    return $checkExtension ? static::getMimeTypeByExtension($file, $magicFile) : null;
}

            
getMimeTypeByExtension() 公共静态方法

根据指定文件的扩展名确定 MIME 类型。

此方法将使用扩展名和 MIME 类型之间的本地映射。

public static 字符串|null getMimeTypeByExtension ( $file, $magicFile null )
$file string

文件名。

$magicFile 字符串|null

包含所有可用 MIME 类型信息的的文件路径(或别名)。如果未设置,则将使用 $mimeMagicFile 指定的文件。

返回值 字符串|null

MIME 类型。如果无法确定 MIME 类型,则返回 Null。

                public static function getMimeTypeByExtension($file, $magicFile = null)
{
    $mimeTypes = static::loadMimeTypes($magicFile);
    if (($ext = pathinfo($file, PATHINFO_EXTENSION)) !== '') {
        $ext = strtolower($ext);
        if (isset($mimeTypes[$ext])) {
            return $mimeTypes[$ext];
        }
    }
    return null;
}

            
loadMimeAliases() 受保护的静态方法(自版本 2.0.14 起可用)

从指定文件加载 MIME 别名。

protected static 数组 loadMimeAliases ( $aliasesFile )
$aliasesFile 字符串|null

包含 MIME 类型别名的文件的路径(或别名)。如果未设置,则将使用 $mimeAliasesFile 指定的文件。

返回值 array

从文件扩展名到 MIME 类型的映射

                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];
}

            
loadMimeExtensions() 受保护的静态方法(自版本 2.0.48 起可用)

从指定文件加载 MIME 扩展名。

protected static 数组 loadMimeExtensions ( $extensionsFile )
$extensionsFile 字符串|null

包含 MIME 类型别名的文件的路径(或别名)。如果未设置,则将使用 $mimeAliasesFile 指定的文件。

返回值 array

从文件扩展名到 MIME 类型的映射

                protected static function loadMimeExtensions($extensionsFile)
{
    if ($extensionsFile === null) {
        $extensionsFile = static::$mimeExtensionsFile;
    }
    $extensionsFile = Yii::getAlias($extensionsFile);
    if (!isset(self::$_mimeExtensions[$extensionsFile])) {
        self::$_mimeExtensions[$extensionsFile] = require $extensionsFile;
    }
    return self::$_mimeExtensions[$extensionsFile];
}

            
loadMimeTypes() 受保护的静态方法

从指定文件加载 MIME 类型。

protected static 数组 loadMimeTypes ( $magicFile )
$magicFile 字符串|null

包含所有可用 MIME 类型信息的的文件路径(或别名)。如果未设置,则将使用 $mimeMagicFile 指定的文件。

返回值 array

从文件扩展名到 MIME 类型的映射

                protected static function loadMimeTypes($magicFile)
{
    if ($magicFile === null) {
        $magicFile = static::$mimeMagicFile;
    }
    $magicFile = Yii::getAlias($magicFile);
    if (!isset(self::$_mimeTypes[$magicFile])) {
        self::$_mimeTypes[$magicFile] = require $magicFile;
    }
    return self::$_mimeTypes[$magicFile];
}

            
localize() 公共静态方法

返回指定文件的本地化版本。

搜索基于指定的语言代码。特别是,将在名称与语言代码相同的子目录下查找具有相同名称的文件。例如,给定文件“path/to/view.php”和语言代码“zh-CN”,将查找本地化文件“path/to/zh-CN/view.php”。如果未找到该文件,则将尝试仅使用语言代码“zh”即“path/to/zh/view.php”进行回退。如果也未找到,则将返回原始文件。

如果目标和源语言代码相同,则将返回原始文件。

public static 字符串 localize ( $file, $language null, $sourceLanguage null )
$file string

原始文件

$language 字符串|null

应将文件本地化到的目标语言。如果未设置,则将使用 yii\base\Application::$language 的值。

$sourceLanguage 字符串|null

原始文件所在的语言。如果未设置,则将使用 yii\base\Application::$sourceLanguage 的值。

返回值 string

匹配的本地化文件,如果未找到本地化版本,则为原始文件。如果目标和源语言代码相同,则将返回原始文件。

                public static function localize($file, $language = null, $sourceLanguage = null)
{
    if ($language === null) {
        $language = Yii::$app->language;
    }
    if ($sourceLanguage === null) {
        $sourceLanguage = Yii::$app->sourceLanguage;
    }
    if ($language === $sourceLanguage) {
        return $file;
    }
    $desiredFile = dirname($file) . DIRECTORY_SEPARATOR . $language . DIRECTORY_SEPARATOR . basename($file);
    if (is_file($desiredFile)) {
        return $desiredFile;
    }
    $language = substr($language, 0, 2);
    if ($language === $sourceLanguage) {
        return $file;
    }
    $desiredFile = dirname($file) . DIRECTORY_SEPARATOR . $language . DIRECTORY_SEPARATOR . basename($file);
    return is_file($desiredFile) ? $desiredFile : $file;
}

            
normalizeOptions() 受保护的静态方法(自版本 2.0.12 起可用)

protected static 数组 normalizeOptions ( 数组 $options )
$options array

原始选项

返回值 array

标准化的选项

                protected static function normalizeOptions(array $options)
{
    if (!array_key_exists('caseSensitive', $options)) {
        $options['caseSensitive'] = true;
    }
    if (isset($options['except'])) {
        foreach ($options['except'] as $key => $value) {
            if (is_string($value)) {
                $options['except'][$key] = self::parseExcludePattern($value, $options['caseSensitive']);
            }
        }
    }
    if (isset($options['only'])) {
        foreach ($options['only'] as $key => $value) {
            if (is_string($value)) {
                $options['only'][$key] = self::parseExcludePattern($value, $options['caseSensitive']);
            }
        }
    }
    return $options;
}

            
normalizePath() 公共静态方法

规范化文件/目录路径。

规范化执行以下操作

  • 将所有目录分隔符转换为 DIRECTORY_SEPARATOR(例如,“\a/b\c”变为“/a/b/c”)
  • 删除尾随目录分隔符(例如,“/a/b/c/”变为“/a/b/c”)
  • 将多个连续的斜杠转换为单个斜杠(例如,“/a///b/c”变为“/a/b/c”)
  • 根据其含义删除“..”和“.”(例如,“/a/./b/../c”变为“/a/c”)

注意:对于已注册的流包装器,将跳过连续斜杠规则和“..” /“.”转换。

public static 字符串 normalizePath ( $path, $ds DIRECTORY_SEPARATOR )
$path string

要标准化的文件/目录路径

$ds string

要在标准化结果中使用的目录分隔符。默认为 DIRECTORY_SEPARATOR

返回值 string

标准化的文件/目录路径

                public static function normalizePath($path, $ds = DIRECTORY_SEPARATOR)
{
    $path = rtrim(strtr($path, '/\\', $ds . $ds), $ds);
    if (strpos($ds . $path, "{$ds}.") === false && strpos($path, "{$ds}{$ds}") === false) {
        return $path;
    }
    // fix #17235 stream wrappers
    foreach (stream_get_wrappers() as $protocol) {
        if (strpos($path, "{$protocol}://") === 0) {
            return $path;
        }
    }
    // the path may contain ".", ".." or double slashes, need to clean them up
    if (strpos($path, "{$ds}{$ds}") === 0 && $ds == '\\') {
        $parts = [$ds];
    } else {
        $parts = [];
    }
    foreach (explode($ds, $path) as $part) {
        if ($part === '..' && !empty($parts) && end($parts) !== '..') {
            array_pop($parts);
        } elseif ($part === '.' || $part === '' && !empty($parts)) {
            continue;
        } else {
            $parts[] = $part;
        }
    }
    $path = implode($ds, $parts);
    return $path === '' ? '.' : $path;
}

            
removeDirectory() 公共静态方法

递归删除目录(及其所有内容)。

public static void removeDirectory ( $dir, $options = [] )
$dir string

要递归删除的目录。

$options array

目录删除的选项。有效的选项包括:

  • traverseSymlinks: 布尔值,是否也遍历指向目录的符号链接。默认为 false,这意味着符号链接目录的内容不会被删除。在这种默认情况下,只会删除符号链接。
抛出 yii\base\ErrorException

如果失败。

                public static function removeDirectory($dir, $options = [])
{
    if (!is_dir($dir)) {
        return;
    }
    if (!empty($options['traverseSymlinks']) || !is_link($dir)) {
        if (!($handle = opendir($dir))) {
            return;
        }
        while (($file = readdir($handle)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }
            $path = $dir . DIRECTORY_SEPARATOR . $file;
            if (is_dir($path)) {
                static::removeDirectory($path, $options);
            } else {
                static::unlink($path);
            }
        }
        closedir($handle);
    }
    if (is_link($dir)) {
        static::unlink($dir);
    } else {
        rmdir($dir);
    }
}

            
unlink() 公共静态方法 (自版本 2.0.14 起可用)

以跨平台的方式删除文件或符号链接

public static boolean unlink ( $path )
$path string