CFileHelper
优质
小牛编辑
134浏览
2023-12-01
所有包 | 方法
CFileHelper提供了一系列用于常用的文件系统操作的助手方法。
源码: framework/utils/CFileHelper.php#53 (显示)
源码: framework/utils/CFileHelper.php#111 (显示)
源码: framework/utils/CFileHelper.php#81 (显示)
源码: framework/utils/CFileHelper.php#158 (显示)
源码: framework/utils/CFileHelper.php#28 (显示)
源码: framework/utils/CFileHelper.php#223 (显示)
源码: framework/utils/CFileHelper.php#249 (显示)
源码: framework/utils/CFileHelper.php#192 (显示)
包 | system.utils |
---|---|
继承 | class CFileHelper |
源自 | 1.0 |
版本 | $Id: CFileHelper.php 3289 2011-06-18 21:20:13Z qiang.xue $ |
源码 | framework/utils/CFileHelper.php |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
copyDirectory() | 递归地将一个目录进行复制。 | CFileHelper |
findFiles() | 返回指定的目录和其子目录下的文件。 | CFileHelper |
getExtension() | 返回一个包含路径的文件名的扩展名。 | CFileHelper |
getMimeType() | 确定指定文件的 MIME 类型。 | CFileHelper |
getMimeTypeByExtension() | 根据给定文件的扩展名确定它的MIME类型。 | CFileHelper |
受保护方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
copyDirectoryRecursive() | 复制一个目录。 | CFileHelper |
findFilesRecursive() | 返回指定目录和它的子目录下的文件。 | CFileHelper |
validatePath() | 验证一个文件或目录。 | CFileHelper |
方法详细
copyDirectory() 方法public static void copyDirectory(string $src, string $dst, array $options=array ( )) | ||
$src | string | 源目录 |
$dst | string | 目标目录 |
$options | array | 进行目录复制时使用的选项。可用选项包括:
|
publicstaticfunctioncopyDirectory($src,$dst,$options=array())
{
$fileTypes=array();
$exclude=array();
$level=-1;
extract($options);
self::copyDirectoryRecursive($src,$dst,'',$fileTypes,$exclude,$level,$options);
}
递归地将一个目录进行复制。 如果目标目录不存在,它将被创建。
copyDirectoryRecursive() 方法protected static void copyDirectoryRecursive(string $src, string $dst, string $base, array $fileTypes, array $exclude, integer $level, array $options) | ||
$src | string | 源目录 |
$dst | string | 目标目录 |
$base | string | 源目录的基准路径 |
$fileTypes | array | 文件扩展名列表(不含点号)。只有扩展名被包含在此列表中的文件被返回。 |
$exclude | array | 目录和文件的排除项列表。每个排除项可以是一个名字或一个路径。 如果一个文件或一个路径与一个排除项相匹配,它将不会被返回。例如,一个排除项 '.svn' 将把名为 '.svn' 的文件或目录排除。一个排除项 '/a/b' 将排除文件或目录 '$src/a/b'。 注意:不管DIRECTORY_SEPARATOR常量的值是什么,都使用'/' 符号作为分隔符。 |
$level | integer | 递归深度,默认值为-1。 Level -1 表示复制此目录下的所有子目录和文件; Level 0 表示仅表示此目录下的文件; level N 表示复制到第N层子目录。 |
$options | array | 附加选项。可用选项包括: newDirMode - 为目标目录设定的权限(默认值为 0777); newFileMode - 为复制的目标文件设置的权限(默认值为当前环境的默认设置)。 |
protectedstaticfunctioncopyDirectoryRecursive($src,$dst,$base,$fileTypes,$exclude,$level,$options)
{
if(!is_dir($dst))
mkdir($dst);
if(isset($options['newDirMode']))
@chmod($dst,$options['newDirMode']);
else
@chmod($dst,0777);
$folder=opendir($src);
while(($file=readdir($folder))!==false)
{
if($file==='.'||$file==='..')
continue;
$path=$src.DIRECTORY_SEPARATOR.$file;
$isFile=is_file($path);
if(self::validatePath($base,$file,$isFile,$fileTypes,$exclude))
{
if($isFile)
{
copy($path,$dst.DIRECTORY_SEPARATOR.$file);
if(isset($options['newFileMode']))
@chmod($dst.DIRECTORY_SEPARATOR.$file,$options['newFileMode']);
}
elseif($level)
self::copyDirectoryRecursive($path,$dst.DIRECTORY_SEPARATOR.$file,$base.'/'.$file,$fileTypes,$exclude,$level-1,$options);
}
}
closedir($folder);
}
复制一个目录。 此方法主要被copyDirectory调用。
findFiles() 方法public static array findFiles(string $dir, array $options=array ( )) | ||
$dir | string | 需要查找的目录 |
$options | array | 文件搜索的选项。可用的选项包括:
|
{return} | array | 在此目录下找到的文件。文件的列表已经过排序。 |
publicstaticfunctionfindFiles($dir,$options=array())
{
$fileTypes=array();
$exclude=array();
$level=-1;
extract($options);
$list=self::findFilesRecursive($dir,'',$fileTypes,$exclude,$level);
sort($list);
return$list;
}
返回指定的目录和其子目录下的文件。
findFilesRecursive() 方法protected static array findFilesRecursive(string $dir, string $base, array $fileTypes, array $exclude, integer $level) | ||
$dir | string | 源目录 |
$base | string | 源目录的基准路径 |
$fileTypes | array | 文件扩展名列表(不含点号)。只有扩展名被包含在此列表中的文件被返回。 |
$exclude | array | 目录和文件的排除项列表。每个排除项可以是一个名字或一个路径。 如果一个文件或一个路径与一个排除项相匹配,它将不会被返回。例如,一个排除项 '.svn' 将把名为 '.svn' 的文件或目录排除。一个排除项 '/a/b' 将排除文件或目录 '$src/a/b'。 注意:不管DIRECTORY_SEPARATOR常量的值是什么,都使用'/' 符号作为分隔符。 |
$level | integer | 递归深度,默认值为-1。 Level -1 表示复制此目录下的所有子目录和文件; Level 0 表示仅表示此目录下的文件; level N 表示复制到第N层子目录。 |
{return} | array | 此目录下的文件 |
protectedstaticfunctionfindFilesRecursive($dir,$base,$fileTypes,$exclude,$level)
{
$list=array();
$handle=opendir($dir);
while(($file=readdir($handle))!==false)
{
if($file==='.'||$file==='..')
continue;
$path=$dir.DIRECTORY_SEPARATOR.$file;
$isFile=is_file($path);
if(self::validatePath($base,$file,$isFile,$fileTypes,$exclude))
{
if($isFile)
$list[]=$path;
elseif($level)
$list=array_merge($list,self::findFilesRecursive($path,$base.'/'.$file,$fileTypes,$exclude,$level-1));
}
}
closedir($handle);
return$list;
}
返回指定目录和它的子目录下的文件。 此方法主要被findFiles调用。
getExtension() 方法 (可用自 v1.1.2)public static string getExtension(string $path) | ||
$path | string | 文件路径 |
{return} | string | 不包含点号的扩展名 |
publicstaticfunctiongetExtension($path)
{
returnpathinfo($path,PATHINFO_EXTENSION);
}
返回一个包含路径的文件名的扩展名。 例如,“path/to/something.php”将返回“php”。
getMimeType() 方法public static string getMimeType(string $file, string $magicFile=NULL, boolean $checkExtension=true) | ||
$file | string | 文件名 |
$magicFile | string | 魔术数据库文件名,通常类似于 /path/to/magic.mime。 它将作为第二个参数传递给finfo_open。 此参数从1.1.3版开始可用。 |
$checkExtension | boolean | 当MIME类型不能依据finfo和mim_content_type确定时 是否检测文件扩展名。默认值是true。此参数从1.1.3版开始可用。 |
{return} | string | MIME类型。当MIME类型无法确定时返回Null。 |
publicstaticfunctiongetMimeType($file,$magicFile=null,$checkExtension=true)
{
if(function_exists('finfo_open'))
{
$options=defined('FILEINFO_MIME_TYPE')?FILEINFO_MIME_TYPE:FILEINFO_MIME;
$info=$magicFile===null?finfo_open($options):finfo_open($options,$magicFile);
if($info&&($result=finfo_file($info,$file))!==false)
return$result;
}
if(function_exists('mime_content_type')&&($result=mime_content_type($file))!==false)
return$result;
return$checkExtension?self::getMimeTypeByExtension($file):null;
}
确定指定文件的 MIME 类型。 此方法按下列顺序依次尝试:
- finfo
- mime_content_type
- getMimeTypeByExtension, 当 $checkExtension 被设置为true。
public static string getMimeTypeByExtension(string $file, string $magicFile=NULL) | ||
$file | string | 文件名 |
$magicFile | string | 包含了所有有效的MIME类型信息的文件的路径 如果没有设置,将使用默认值 'system.utils.mimeTypes' 文件。 此参数从1.1.3版开始可用。 |
{return} | string | MIME类型。当MIME类型无法确定时返回Null。 |
publicstaticfunctiongetMimeTypeByExtension($file,$magicFile=null)
{
static$extensions;
if($extensions===null)
$extensions=$magicFile===null?require(Yii::getPathOfAlias('system.utils.mimeTypes').'.php'):$magicFile;
if(($ext=pathinfo($file,PATHINFO_EXTENSION))!=='')
{
$ext=strtolower($ext);
if(isset($extensions[$ext]))
return$extensions[$ext];
}
returnnull;
}
根据给定文件的扩展名确定它的MIME类型。 此方法使用了一个本地的扩展名与MIME类型的映射。
validatePath() 方法protected static boolean validatePath(string $base, string $file, boolean $isFile, array $fileTypes, array $exclude) | ||
$base | string | 源目录的基准路径 |
$file | string | 文件或目录的名字 |
$isFile | boolean | 是否是一个文件 |
$fileTypes | array | 文件扩展名列表(不含点号)。只有扩展名被包含在此列表中的文件被验证。 |
$exclude | array | 目录和文件的排除项列表。每个排除项可以是一个名字或一个路径。 如果一个文件或一个路径与一个排除项相匹配,它将不会被验证。例如,一个排除项 '.svn' 将把名为 '.svn' 的文件或目录排除。一个排除项 '/a/b' 将排除文件或目录 '$src/a/b'。 注意:不管DIRECTORY_SEPARATOR常量的值是什么,都使用'/' 符号作为分隔符。 |
{return} | boolean | 此文件或目录是否有效 |
protectedstaticfunctionvalidatePath($base,$file,$isFile,$fileTypes,$exclude)
{
foreach($excludeas$e)
{
if($file===$e||strpos($base.'/'.$file,$e)===0)
returnfalse;
}
if(!$isFile||empty($fileTypes))
returntrue;
if(($type=pathinfo($file,PATHINFO_EXTENSION))!=='')
returnin_array($type,$fileTypes);
else
returnfalse;
}
验证一个文件或目录。