Spec-Zone.ru › Yii 1.1

CFileHelper

Пакет system.utils
Наследование класс CFileHelper
С 1.0
Исходный код framework/utils/CFileHelper.php
CFileHelper предоставляет набор вспомогательных методов для общих операций с файловой системой.

Публичные методы

Метод Описание Определено в
copyDirectory() Рекурсивно копирует одну директорию в другую. CFileHelper
createDirectory() Безопасная для среды версия mkdir. Поддерживает рекурсивное создание. CFileHelper
findFiles() Возвращает файлы, найденные в указанной директории и её поддиректориях. CFileHelper
getExtension() Возвращает расширение имени файла. CFileHelper
getExtensionByMimeType() Определяет расширение файла по его MIME-типу. CFileHelper
getMimeType() Определяет MIME-тип указанного файла. CFileHelper
getMimeTypeByExtension() Определяет MIME-тип по расширению имени файла. CFileHelper
removeDirectory() Рекурсивно удаляет директорию. 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: массив, список расширений файлов (без точки). Будут скопированы только файлы с этими расширениями.
  • exclude: массив, список исключений для директорий и файлов. Каждое исключение может быть именем или путем. Если имя или путь файла или директории совпадает с исключением, он не будет скопирован. Например, исключение '.svn' исключит все файлы и директории с именем '.svn'. А исключение '/a/b' исключит файл или директорию '$src/a/b'. Обратите внимание, что '/' должен использоваться в качестве разделителя независимо от значения константы DIRECTORY_SEPARATOR.
  • level: целое число, глубина рекурсии, по умолчанию -1. Уровень -1 означает копирование всех директорий и файлов в директории; Уровень 0 означает копирование только файлов НЕПОСРЕДСТВЕННО в директории; уровень N означает копирование директорий, находящихся на уровне N вложенности.
  • newDirMode - разрешения, которые нужно установить для вновь скопированных директорий (по умолчанию 0777);
  • newFileMode - разрешения, которые нужно установить для вновь скопированных файлов (по умолчанию - текущие настройки среды).
Исходный код: framework/utils/CFileHelper.php#54 (показать)
public static function copyDirectory($src,$dst,$options=array())
{
    
$fileTypes=array();
    
$exclude=array();
    
$level=-1;
    
extract($options);
    if(!
is_dir($dst))
        
self::createDirectory($dst,isset($options['newDirMode'])?$options['newDirMode']:null,true);

    
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. Уровень -1 означает копирование всех директорий и файлов в директории; Уровень 0 означает копирование только файлов НЕПОСРЕДСТВЕННО в директории; уровень N означает копирование директорий, находящихся на уровне N вложенности.
$options array дополнительные параметры. Поддерживаются следующие параметры: newDirMode - разрешения, которые нужно установить для вновь скопированных директорий (по умолчанию 0777); newFileMode - разрешения, которые нужно установить для вновь скопированных файлов (по умолчанию - текущие настройки среды).
Исходный код: framework/utils/CFileHelper.php#158 (показать)
protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exclude,$level,$options)
{
    if(!
is_dir($dst))
        
self::createDirectory($dst,isset($options['newDirMode'])?$options['newDirMode']:null,false);

    
$folder=opendir($src);
    if(
$folder===false)
        throw new 
Exception('Unable to open directory: ' . $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.

createDirectory() метод

public static boolean createDirectory(string $dst, integer $mode=NULL, boolean $recursive=false)
$dst string путь для создания
$mode integer разрешения для вновь созданных директорий, если не указано - будет использоваться 0777
$recursive boolean создавать ли структуру директорий рекурсивно, если родительские директории не существуют
{return} boolean результат mkdir
Исходный код: framework/utils/CFileHelper.php#356 (показать)
public static function createDirectory($dst,$mode=null,$recursive=false)
{
    if(
$mode===null)
        
$mode=0777;
    
$prevDir=dirname($dst);
    if(
$recursive && !is_dir($dst) && !is_dir($prevDir))
        
self::createDirectory(dirname($dst),$mode,true);
    
$res=mkdir($dst, $mode);
    @
chmod($dst,$mode);
    return 
$res;
}

Безопасная для среды версия mkdir. Поддерживает рекурсивное создание. Для предотвращения побочных эффектов umask используется chmod.

См. также

  • mkdir

findFiles() метод

public static array findFiles(string $dir, array $options=array ( ))
$dir string директория, в которой будут искаться файлы
$options array параметры поиска файлов. Допустимые значения:
  • fileTypes: массив, список расширений файлов (без точки). Будут возвращены только файлы с этими расширениями.
  • exclude: массив, список исключений для директорий и файлов. Каждое исключение может быть именем или путем. Если имя или путь файла или директории совпадает с исключением, он не будет скопирован. Например, исключение '.svn' исключит все файлы и директории с именем '.svn'. А исключение '/a/b' исключит файл или директорию '$src/a/b'. Обратите внимание, что '/' должен использоваться в качестве разделителя независимо от значения константы DIRECTORY_SEPARATOR.
  • level: целое число, глубина рекурсии, по умолчанию -1. Уровень -1 означает поиск во всех директориях и поддиректориях; Уровень 0 означает поиск только в текущей директории; уровень N означает поиск в директориях на N уровнях вложенности.
  • absolutePaths: boolean, возвращать абсолютные пути или относительные, по умолчанию - true.
{return} array список найденных файлов в отсортированном виде.
Исходный код: framework/utils/CFileHelper.php#126 (показать)
public static function findFiles($dir,$options=array())
{
    
$fileTypes=array();
    
$exclude=array();
    
$level=-1;
    
$absolutePaths=true;
    
extract($options);
    
$list=self::findFilesRecursive($dir,'',$fileTypes,$exclude,$level,$absolutePaths);
    
sort($list);
    return 
$list;
}

Возвращает файлы, найденные в указанной директории и её поддиректориях.

findFilesRecursive() метод

protected static array findFilesRecursive(string $dir, string $base, array $fileTypes, array $exclude, integer $level, boolean $absolutePaths)
$dir строка исходная директория
$base строка путь, относительный к исходной директории
$fileTypes массив список суффиксов имён файлов (без точки). Будут возвращены только файлы с этими суффиксами.
$exclude массив список исключений для директорий и файлов. Каждое исключение может быть именем или путём. Если имя или путь к файлу или директории совпадает с исключением, он не будет скопирован. Например, исключение '.svn' исключит все файлы и директории с именем '.svn'. А исключение '/a/b' исключит файл или директорию '$src/a/b'. Обратите внимание, что '/' используется в качестве разделителя независимо от значения константы DIRECTORY_SEPARATOR.
$level целое число глубина рекурсии. По умолчанию -1. Уровень -1 означает поиск всех директорий и файлов в директории; Уровень 0 означает поиск только файлов НЕПОСРЕДСТВЕННО в директории; уровень N означает поиск тех директорий, которые находятся на уровне N вложенности.
$absolutePaths логическое значение возвращать абсолютные пути или относительные
{возврат} массив найденные файлы в директории.
Исходный код: framework/utils/CFileHelper.php#205 (показать)
protected static function findFilesRecursive($dir,$base,$fileTypes,$exclude,$level,$absolutePaths)
{
    
$list=array();
    
$handle=opendir($dir.$base);
    if(
$handle===false)
        throw new 
Exception('Unable to open directory: ' . $dir);
    while((
$file=readdir($handle))!==false)
    {
        if(
$file==='.' || $file==='..')
            continue;
        
$path=substr($base.DIRECTORY_SEPARATOR.$file,1);
        
$fullPath=$dir.DIRECTORY_SEPARATOR.$path;
        
$isFile=is_file($fullPath);
        if(
self::validatePath($base,$file,$isFile,$fileTypes,$exclude))
        {
            if(
$isFile)
                
$list[]=$absolutePaths?$fullPath:$path;
            elseif(
$level)
                
$list=array_merge($list,self::findFilesRecursive($dir,$base.'/'.$file,$fileTypes,$exclude,$level-1,$absolutePaths));
        }
    }
    
closedir($handle);
    return 
$list;
}

Возвращает файлы, найденные в указанной директории и поддиректориях. Этот метод в основном используется методом findFiles.

getExtension() метод (доступен начиная с версии 1.1.2)

public static string getExtension(string $path)
$path строка путь к файлу
{возврат} строка имя расширения без символа точки.
Исходный код: framework/utils/CFileHelper.php#27 (показать)
public static function getExtension($path)
{
    return 
pathinfo($path,PATHINFO_EXTENSION);
}

Возвращает имя расширения пути к файлу. Например, путь "path/to/something.php" вернёт "php".

getExtensionByMimeType() метод

public static string getExtensionByMimeType(string $file, string $magicFile=NULL)
$file строка имя файла.
$magicFile строка путь к файлу, содержащему всю доступную информацию о расширениях. Если не задан, используется файл по умолчанию 'system.utils.fileExtensions'. Этот параметр доступен с версии 1.1.16.
{возврат} строка имя расширения. Возвращает null, если расширение определить нельзя.
Исходный код: framework/utils/CFileHelper.php#328 (показать)
public static function getExtensionByMimeType($file,$magicFile=null)
{
    static 
$mimeTypes,$customMimeTypes=array();
    if(
$magicFile===null && $mimeTypes===null)
        
$mimeTypes=require(Yii::getPathOfAlias('system.utils.fileExtensions').'.php');
    elseif(
$magicFile!==null && !isset($customMimeTypes[$magicFile]))
        
$customMimeTypes[$magicFile]=require($magicFile);
    if((
$mime=self::getMimeType($file))!==null)
    {
        
$mime=strtolower($mime);
        if(
$magicFile===null && isset($mimeTypes[$mime]))
            return 
$mimeTypes[$mime];
        elseif(
$magicFile!==null && isset($customMimeTypes[$magicFile][$mime]))
            return 
$customMimeTypes[$magicFile][$mime];
    }
    return 
null;
}

Определяет имя расширения файла на основе его MIME-типа. Этот метод использует локальное отображение между MIME-типом и именем расширения.

getMimeType() метод

public static string getMimeType(string $file, string $magicFile=NULL, boolean $checkExtension=true)
$file строка имя файла.
$magicFile строка имя файла базы данных магии, обычно что-то вроде /path/to/magic.mime. Будет передано как второй параметр к finfo_open. Формат файла магии описан в man 5 magic, обратите внимание, что этот файл не содержит стандартного PHP-массива, как можно было предположить. Указанный файл магии будет использован только в том случае, если доступен расширение fileinfo PHP. Этот параметр доступен с версии 1.1.3.
$checkExtension логическое значение произвести проверку расширения файла в случае, если MIME-тип не может быть определён на основе finfo и mime_content_type. По умолчанию true. Этот параметр доступен с версии 1.1.4.
{возврат} строка MIME-тип. Возвращает null, если MIME-тип определить невозможно.
Исходный код: framework/utils/CFileHelper.php#275 (показать)
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 строка имя файла.
$magicFile строка путь к файлу, содержащему всю доступную информацию о MIME-типах. Если не задан, используется файл по умолчанию 'system.utils.mimeTypes'. Этот параметр доступен с версии 1.1.3.
{возврат} строка MIME-тип. Возвращает null, если MIME-тип определить невозможно.
Исходный код: framework/utils/CFileHelper.php#301 (показать)
public static function getMimeTypeByExtension($file,$magicFile=null)
{
    static 
$extensions,$customExtensions=array();
    if(
$magicFile===null && $extensions===null)
        
$extensions=require(Yii::getPathOfAlias('system.utils.mimeTypes').'.php');
    elseif(
$magicFile!==null && !isset($customExtensions[$magicFile]))
        
$customExtensions[$magicFile]=require($magicFile);
    if((
$ext=self::getExtension($file))!=='')
    {
        
$ext=strtolower($ext);
        if(
$magicFile===null && isset($extensions[$ext]))
            return 
$extensions[$ext];
        elseif(
$magicFile!==null && isset($customExtensions[$magicFile][$ext]))
            return 
$customExtensions[$magicFile][$ext];
    }
    return 
null;
}

Определяет MIME-тип на основе имени расширения указанного файла. Этот метод использует локальное отображение между именем расширения и MIME-типом.

removeDirectory() метод (доступен начиная с v1.1.14)

public static void removeDirectory(string $directory, array $options=array ( ))
$directory строка директория, подлежащая рекурсивному удалению.
$options массив для удаления директории. Допустимые значения:
  • traverseSymlinks: логическое значение, указывает, следует ли проходить по символическим ссылкам на директории. По умолчанию `false`, что означает, что содержимое символической ссылки на директорию не будет удалено. В этом случае по умолчанию будет удалена только символическая ссылка.
Примечание: параметр options доступен с версии 1.1.16
Исходный код: framework/utils/CFileHelper.php#78 (показать)
public static function removeDirectory($directory,$options=array())
{
    if(!isset(
$options['traverseSymlinks']))
        
$options['traverseSymlinks']=false;
    
$items=glob($directory.DIRECTORY_SEPARATOR.'{,.}*',GLOB_MARK | GLOB_BRACE);
    foreach(
$items as $item)
    {
        if(
basename($item)=='.' || basename($item)=='..')
            continue;
        if(
substr($item,-1)==DIRECTORY_SEPARATOR)
        {
            if(!
$options['traverseSymlinks'] && is_link(rtrim($item,DIRECTORY_SEPARATOR)))
                
unlink(rtrim($item,DIRECTORY_SEPARATOR));
            else
                
self::removeDirectory($item,$options);
        }
        else
            
unlink($item);
    }
    if(
is_dir($directory=rtrim($directory,'\\/')))
    {
        if(
is_link($directory))
            
unlink($directory);
        else
            
rmdir($directory);
    }
}

Удаляет директорию рекурсивно.

validatePath() метод

protected static boolean validatePath(string $base, string $file, boolean $isFile, array $fileTypes, array $exclude)
$base строка путь, относительный к исходной директории
$file строка имя файла или директории
$isFile логическое значение является ли это файлом
$fileTypes массив список допустимых суффиксов имён файлов (без точки).
$exclude массив список исключений для директорий и файлов. Каждое исключение может быть именем или путём. Если имя или путь к файлу или директории совпадает с исключением, возвращается false. Например, исключение '.svn' вернёт false для всех файлов и директорий с именем '.svn'. И исключение '/a/b' вернёт false для файла или директории '$src/a/b'. Обратите внимание, что '/' используется в качестве разделителя независимо от значения константы DIRECTORY_SEPARATOR.
{возврат} логическое значение является ли файл или директория валидным
Исходный код: framework/utils/CFileHelper.php#242 (показать)
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=self::getExtension($file))!=='')
        return 
in_array($type,$fileTypes);
    else
        return 
false;
}

Проверяет файл или директорию.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CFileHelper

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API