Yii Framework v1.1.10 绫诲弬鑰

CFileHelper

system.utils
缁ф壙 class CFileHelper
婧愯嚜 1.0
鐗堟湰 $Id: CFileHelper.php 3289 2011-06-18 21:20:13Z qiang.xue $
婧愮爜 framework/utils/CFileHelper.php
CFileHelper鎻愪緵浜嗕竴绯诲垪鐢ㄤ簬甯哥敤鐨勬枃浠剁郴缁熸搷浣滅殑鍔╂墜鏂规硶銆

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
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 杩涜鐩綍澶嶅埗鏃朵娇鐢ㄧ殑閫夐」銆傚彲鐢ㄩ夐」鍖呮嫭锛
  • fileTypes: array, 鏂囦欢鍚嶅悗缂鍒楄〃锛堜笉鍖呮嫭鐐瑰彿锛夈傚彧鏈夋墿灞曞悕鍦ㄦ鍒楄〃涓殑鏂囦欢鎵嶄細琚鍒躲
  • exclude: array, 琚帓闄ょ殑鏂囦欢鍜岀洰褰曠殑鍒楄〃銆傛瘡涓涓帓闄ら」鍙互鏄竴涓悕瀛楁垨涓涓洰褰曘 濡傛灉涓涓枃浠躲佺洰褰曟垨璺緞涓庝竴涓帓闄ら」鐩稿尮閰嶏紝瀹冨皢涓嶄細琚鍒躲備緥濡傦紝涓涓帓闄ら」 '.svn' 灏嗘妸鍚嶄负 '.svn' 鐨勬枃浠舵垨鐩綍鎺掗櫎銆備竴涓帓闄ら」 '/a/b' 灏嗘帓闄ゆ枃浠舵垨鐩綍 '$src/a/b'銆 娉ㄦ剰锛氫笉绠IRECTORY_SEPARATOR甯搁噺鐨勫兼槸浠涔堬紝閮戒娇鐢'/' 绗﹀彿浣滀负鍒嗛殧绗︺
  • level: integer, 閫掑綊娣卞害锛岄粯璁ゅ间负-1銆 Level -1 琛ㄧず澶嶅埗姝ょ洰褰曚笅鐨勬墍鏈夊瓙鐩綍鍜屾枃浠讹紱 Level 0 琛ㄧず浠呰〃绀烘鐩綍涓嬬殑鏂囦欢锛 level N 琛ㄧず澶嶅埗鍒扮N灞傚瓙鐩綍銆
婧愮爜锛 framework/utils/CFileHelper.php#53 (鏄剧ず)
public static function copyDirectory($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'銆 娉ㄦ剰锛氫笉绠IRECTORY_SEPARATOR甯搁噺鐨勫兼槸浠涔堬紝閮戒娇鐢'/' 绗﹀彿浣滀负鍒嗛殧绗︺
$level integer 閫掑綊娣卞害锛岄粯璁ゅ间负-1銆 Level -1 琛ㄧず澶嶅埗姝ょ洰褰曚笅鐨勬墍鏈夊瓙鐩綍鍜屾枃浠讹紱 Level 0 琛ㄧず浠呰〃绀烘鐩綍涓嬬殑鏂囦欢锛 level N 琛ㄧず澶嶅埗鍒扮N灞傚瓙鐩綍銆
$options array 闄勫姞閫夐」銆傚彲鐢ㄩ夐」鍖呮嫭锛 newDirMode - 涓虹洰鏍囩洰褰曡瀹氱殑鏉冮檺锛堥粯璁ゅ间负 0777锛夛紱 newFileMode - 涓哄鍒剁殑鐩爣鏂囦欢璁剧疆鐨勬潈闄愶紙榛樿鍊间负褰撳墠鐜鐨勯粯璁よ缃級銆
婧愮爜锛 framework/utils/CFileHelper.php#111 (鏄剧ず)
protected static function copyDirectoryRecursive($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']);
            }
            else if(
$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 鏂囦欢鎼滅储鐨勯夐」銆傚彲鐢ㄧ殑閫夐」鍖呮嫭锛
  • fileTypes: array, 鏂囦欢鎵╁睍鍚嶇殑鍒楄〃锛堜笉鍚偣鍙凤級銆傚彧鏈夋墿灞曞悕琚寘鍚湪姝ゅ垪琛ㄤ腑鐨勬枃浠惰杩斿洖銆
  • exclude: array, 鐩綍鍜屾枃浠剁殑鎺掗櫎椤瑰垪琛ㄣ傛瘡涓帓闄ら」鍙互鏄竴涓悕瀛楁垨涓涓矾寰勩 濡傛灉涓涓枃浠舵垨涓涓矾寰勪笌涓涓帓闄ら」鐩稿尮閰嶏紝瀹冨皢涓嶄細琚繑鍥炪備緥濡傦紝涓涓帓闄ら」 '.svn' 灏嗘妸鍚嶄负 '.svn' 鐨勬枃浠舵垨鐩綍鎺掗櫎銆備竴涓帓闄ら」 '/a/b' 灏嗘帓闄ゆ枃浠舵垨鐩綍 '$src/a/b'銆 娉ㄦ剰锛氫笉绠IRECTORY_SEPARATOR甯搁噺鐨勫兼槸浠涔堬紝閮戒娇鐢'/' 绗﹀彿浣滀负鍒嗛殧绗︺
  • level: integer, 閫掑綊娣卞害锛岄粯璁ゅ间负-1銆 Level -1 琛ㄧず澶嶅埗姝ょ洰褰曚笅鐨勬墍鏈夊瓙鐩綍鍜屾枃浠讹紱 Level 0 琛ㄧず浠呰〃绀烘鐩綍涓嬬殑鏂囦欢锛 level N 琛ㄧず澶嶅埗鍒扮N灞傚瓙鐩綍銆
{return} array 鍦ㄦ鐩綍涓嬫壘鍒扮殑鏂囦欢銆傛枃浠剁殑鍒楄〃宸茬粡杩囨帓搴忋
婧愮爜锛 framework/utils/CFileHelper.php#81 (鏄剧ず)
public static function findFiles($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'銆 娉ㄦ剰锛氫笉绠IRECTORY_SEPARATOR甯搁噺鐨勫兼槸浠涔堬紝閮戒娇鐢'/' 绗﹀彿浣滀负鍒嗛殧绗︺
$level integer 閫掑綊娣卞害锛岄粯璁ゅ间负-1銆 Level -1 琛ㄧず澶嶅埗姝ょ洰褰曚笅鐨勬墍鏈夊瓙鐩綍鍜屾枃浠讹紱 Level 0 琛ㄧず浠呰〃绀烘鐩綍涓嬬殑鏂囦欢锛 level N 琛ㄧず澶嶅埗鍒扮N灞傚瓙鐩綍銆
{return} array 姝ょ洰褰曚笅鐨勬枃浠
婧愮爜锛 framework/utils/CFileHelper.php#158 (鏄剧ず)
protected static function findFilesRecursive($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;
            else if(
$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 涓嶅寘鍚偣鍙风殑鎵╁睍鍚
婧愮爜锛 framework/utils/CFileHelper.php#28 (鏄剧ず)
public static function getExtension($path)
{
    return 
pathinfo($pathPATHINFO_EXTENSION);
}

杩斿洖涓涓寘鍚矾寰勭殑鏂囦欢鍚嶇殑鎵╁睍鍚嶃 渚嬪锛屸減ath/to/something.php鈥濆皢杩斿洖鈥減hp鈥濄

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 褰揗IME绫诲瀷涓嶈兘渚濇嵁finfo鍜宮im_content_type纭畾鏃 鏄惁妫娴嬫枃浠舵墿灞曞悕銆傞粯璁ゅ兼槸true銆傛鍙傛暟浠1.1.3鐗堝紑濮嬪彲鐢ㄣ
{return} string MIME绫诲瀷銆傚綋MIME绫诲瀷鏃犳硶纭畾鏃惰繑鍥濶ull銆
婧愮爜锛 framework/utils/CFileHelper.php#223 (鏄剧ず)
public static function getMimeType($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 绫诲瀷銆 姝ゆ柟娉曟寜涓嬪垪椤哄簭渚濇灏濊瘯锛

  1. finfo
  2. mime_content_type
  3. getMimeTypeByExtension, 褰 $checkExtension 琚缃负true銆

getMimeTypeByExtension() 鏂规硶
public static string getMimeTypeByExtension(string $file, string $magicFile=NULL)
$file string 鏂囦欢鍚
$magicFile string 鍖呭惈浜嗘墍鏈夋湁鏁堢殑MIME绫诲瀷淇℃伅鐨勬枃浠剁殑璺緞 濡傛灉娌℃湁璁剧疆锛屽皢浣跨敤榛樿鍊 'system.utils.mimeTypes' 鏂囦欢銆 姝ゅ弬鏁颁粠1.1.3鐗堝紑濮嬪彲鐢ㄣ
{return} string MIME绫诲瀷銆傚綋MIME绫诲瀷鏃犳硶纭畾鏃惰繑鍥濶ull銆
婧愮爜锛 framework/utils/CFileHelper.php#249 (鏄剧ず)
public static function getMimeTypeByExtension($file,$magicFile=null)
{
    static 
$extensions;
    if(
$extensions===null)
        
$extensions=$magicFile===null ? require(Yii::getPathOfAlias('system.utils.mimeTypes').'.php') : $magicFile;
    if((
$ext=pathinfo($filePATHINFO_EXTENSION))!=='')
    {
        
$ext=strtolower($ext);
        if(isset(
$extensions[$ext]))
            return 
$extensions[$ext];
    }
    return 
null;
}

鏍规嵁缁欏畾鏂囦欢鐨勬墿灞曞悕纭畾瀹冪殑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'銆 娉ㄦ剰锛氫笉绠IRECTORY_SEPARATOR甯搁噺鐨勫兼槸浠涔堬紝閮戒娇鐢'/' 绗﹀彿浣滀负鍒嗛殧绗︺
{return} boolean 姝ゆ枃浠舵垨鐩綍鏄惁鏈夋晥
婧愮爜锛 framework/utils/CFileHelper.php#192 (鏄剧ず)
protected static function validatePath($base,$file,$isFile,$fileTypes,$exclude)
{
    foreach(
$exclude as $e)
    {
        if(
$file===$e || strpos($base.'/'.$file,$e)===0)
            return 
false;
    }
    if(!
$isFile || empty($fileTypes))
        return 
true;
    if((
$type=pathinfo($filePATHINFO_EXTENSION))!=='')
        return 
in_array($type,$fileTypes);
    else
        return 
false;
}

楠岃瘉涓涓枃浠舵垨鐩綍銆

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.