0 关注者

类 yii\helpers\FileHelper

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

文件系统帮助器。

公共属性

隐藏继承属性

属性 类型 描述 定义于
$mimeAliasesFile 字符串 包含 MIME 别名的 PHP 文件的路径(或别名)。 yii\helpers\BaseFileHelper
$mimeExtensionsFile 字符串 包含每个 MIME 类型扩展名的 PHP 文件的路径(或别名)。 yii\helpers\BaseFileHelper
$mimeMagicFile 字符串 包含 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

方法详情

隐藏继承方法

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

定义于: yii\helpers\BaseFileHelper::changeOwnership()

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

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

public static void changeOwnership ( $path, $ownership, $mode null )
$path 字符串

文件或目录的路径。

$ownership 字符串|数组|整数|

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

$mode 整数|

要为文件或目录设置的权限。如果传递 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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::copyDirectory()

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

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

public static void copyDirectory ( $src, $dst, $options = [] )
$src 字符串

源目录

$dst 字符串

目标目录

$options 数组

目录复制选项。有效选项如下

  • 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: 回调函数,在复制每个子目录或文件之前调用。如果回调函数返回 false,则该子目录或文件的复制操作将被取消。回调函数的签名应为:function ($from, $to),其中 $from 是要从中复制的子目录或文件,而 $to 是复制目标。
  • afterCopy: 回调函数,在成功复制每个子目录或文件之后调用。回调函数的签名应为: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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::createDirectory()

创建新的目录。

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

public static boolean createDirectory ( $path, $mode 0775, $recursive true )
$path 字符串

要创建的目录的路径。

$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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::filterPath()

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

public static boolean filterPath ( $path, $options )
$path 字符串

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

$options 数组

过滤选项。有关支持选项的说明,请参见 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 起可用)

定义于: yii\helpers\BaseFileHelper::findDirectories()

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

public static array findDirectories ( $dir, $options = [] )
$dir 字符串

将查找文件的目录。

$options 数组

目录搜索选项。有效选项为

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

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

返回 数组

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

抛出 yii\base\InvalidArgumentException

如果目录无效。

                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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::findFiles()

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

public static array findFiles ( $dir, $options = [] )
$dir 字符串

将查找文件的目录。

$options 数组

文件搜索选项。有效选项为

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

    • true: 将返回目录或文件(onlyexcept 选项将被忽略)
    • false: 将不返回目录或文件(onlyexcept 选项将被忽略)
    • null: onlyexcept 选项将决定是否应返回目录或文件
  • except: 数组,要从结果中排除的模式列表,匹配文件或目录路径。以斜杠 ('/') 结尾的模式仅适用于目录路径,而以 '/' 结尾的模式仅适用于文件路径。例如,“/a/b”匹配以“/a/b”结尾的所有文件路径;.svn/ 匹配以 .svn 结尾的目录路径。如果模式不包含斜杠 (/),则它将被视为 shell glob 模式,并针对相对于 $dir 的路径名进行匹配检查。否则,该模式将被视为适用于 fnmatch(3) 的 shell glob,并使用 FNM_PATHNAME 标志:模式中的通配符将不会匹配路径名中的 /。例如,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
返回 数组

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

抛出 yii\base\InvalidArgumentException

如果目录无效。

                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 起可用)

定义于: yii\helpers\BaseFileHelper::getExtensionByMimeType()

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

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

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

文件 MIME 类型。

$preferShort 布尔值

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

$magicFile string|null

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

返回 string|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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::getExtensionsByMimeType()

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

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

public static array getExtensionsByMimeType ( $mimeType, $magicFile null )
$mimeType 字符串

文件 MIME 类型。

$magicFile string|null

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

返回 数组

与指定 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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::getMimeType()

确定指定文件的 MIME 类型。

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

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

文件名。

$magicFile string|null

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

$checkExtension 布尔值

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

返回 string|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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::getMimeTypeByExtension()

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

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

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

文件名。

$magicFile string|null

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

返回 string|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 开始可用)

定义于: yii\helpers\BaseFileHelper::loadMimeAliases()

从指定文件加载 MIME 别名。

protected static array loadMimeAliases ( $aliasesFile )
$aliasesFile string|null

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

返回 数组

从文件扩展名到 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 开始可用)

定义于: yii\helpers\BaseFileHelper::loadMimeExtensions()

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

protected static array loadMimeExtensions ( $extensionsFile )
$extensionsFile string|null

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

返回 数组

从文件扩展名到 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() 受保护的静态方法

定义于: yii\helpers\BaseFileHelper::loadMimeTypes()

从指定文件加载 MIME 类型。

protected static array loadMimeTypes ( $magicFile )
$magicFile string|null

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

返回 数组

从文件扩展名到 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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::localize()

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

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

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

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

原始文件

$language string|null

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

$sourceLanguage string|null

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

返回 字符串

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

                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 array normalizeOptions ( array $options )
$options 数组

原始选项

返回 数组

规范化后的选项

                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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::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 string normalizePath ( $path, $ds DIRECTORY_SEPARATOR )
$path 字符串

要规范化的文件/目录路径

$ds 字符串

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

返回 字符串

规范化的文件/目录路径

                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() 公共静态方法

定义于: yii\helpers\BaseFileHelper::removeDirectory()

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

public static void removeDirectory ( $dir, $options = [] )
$dir 字符串

要递归删除的目录。

$options 数组

目录删除选项。有效选项为

  • traverseSymlinks: boolean,是否也遍历符号链接到目录。默认为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() public static method (available since version 2.0.14)

定义于: yii\helpers\BaseFileHelper::unlink()

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

public static boolean unlink ( $path )
$path 字符串