mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 22:12:37 +08:00
refactored FileHelper::copyDirectory()
This commit is contained in:
@ -124,7 +124,6 @@ class FileHelper
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies a whole directory as another one.
|
* Copies a whole directory as another one.
|
||||||
* The files and sub-directories will also be copied over.
|
* The files and sub-directories will also be copied over.
|
||||||
@ -134,15 +133,12 @@ class FileHelper
|
|||||||
*
|
*
|
||||||
* - dirMode: integer, the permission to be set for newly copied directories. Defaults to 0777.
|
* - dirMode: integer, the permission to be set for newly copied directories. Defaults to 0777.
|
||||||
* - fileMode: integer, the permission to be set for newly copied files. Defaults to the current environment setting.
|
* - fileMode: integer, the permission to be set for newly copied files. Defaults to the current environment setting.
|
||||||
* - filter: callback, a PHP callback that is called for every sub-directory and file to
|
* - beforeCopy: callback, a PHP callback that is called before copying each sub-directory or file.
|
||||||
* determine if it should be copied. The signature of the callback should be:
|
* If the callback returns false, the copy operation for the sub-directory or file will be cancelled.
|
||||||
*
|
* The signature of the callback should be: `function ($from, $to)`, where `$from` is the sub-directory or
|
||||||
* ~~~
|
* file to be copied from, while `$to` is the copy target.
|
||||||
* // $path is the file/directory path to be copied
|
* - afterCopy: callback, a PHP callback that is called after a sub-directory or file is successfully copied.
|
||||||
* function ($path) {
|
* The signature of the callback is similar to that of `beforeCopy`.
|
||||||
* // return a boolean indicating if $path should be copied
|
|
||||||
* }
|
|
||||||
* ~~~
|
|
||||||
*/
|
*/
|
||||||
public static function copyDirectory($src, $dst, $options = array())
|
public static function copyDirectory($src, $dst, $options = array())
|
||||||
{
|
{
|
||||||
@ -155,16 +151,19 @@ class FileHelper
|
|||||||
if ($file === '.' || $file === '..') {
|
if ($file === '.' || $file === '..') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$srcPath = $src . DIRECTORY_SEPARATOR . $file;
|
$from = $src . DIRECTORY_SEPARATOR . $file;
|
||||||
if (!isset($options['filter']) || call_user_func($options['filter'], $srcPath)) {
|
$to = $dst . DIRECTORY_SEPARATOR . $file;
|
||||||
$dstPath = $dst . DIRECTORY_SEPARATOR . $file;
|
if (!isset($options['beforeCopy']) || call_user_func($options['beforeCopy'], $from, $to)) {
|
||||||
if (is_file($srcPath)) {
|
if (is_file($from)) {
|
||||||
copy($srcPath, $dstPath);
|
copy($from, $to);
|
||||||
if (isset($options['fileMode'])) {
|
if (isset($options['fileMode'])) {
|
||||||
chmod($dstPath, $options['fileMode']);
|
chmod($to, $options['fileMode']);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
static::copyDirectory($srcPath, $dstPath, $options);
|
static::copyDirectory($from, $to, $options);
|
||||||
|
}
|
||||||
|
if (isset($options['afterCopy'])) {
|
||||||
|
call_user_func($options['afterCopy'], $from, $to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user