mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-01 11:39:41 +08:00
refactored FileHelper::copyDirectory()
This commit is contained in:
@ -124,7 +124,6 @@ class FileHelper
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Copies a whole directory as another one.
|
||||
* 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.
|
||||
* - 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
|
||||
* determine if it should be copied. The signature of the callback should be:
|
||||
*
|
||||
* ~~~
|
||||
* // $path is the file/directory path to be copied
|
||||
* function ($path) {
|
||||
* // return a boolean indicating if $path should be copied
|
||||
* }
|
||||
* ~~~
|
||||
* - beforeCopy: callback, a PHP callback that is called before copying each sub-directory or file.
|
||||
* 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.
|
||||
* - afterCopy: callback, a PHP callback that is called after a sub-directory or file is successfully copied.
|
||||
* The signature of the callback is similar to that of `beforeCopy`.
|
||||
*/
|
||||
public static function copyDirectory($src, $dst, $options = array())
|
||||
{
|
||||
@ -155,16 +151,19 @@ class FileHelper
|
||||
if ($file === '.' || $file === '..') {
|
||||
continue;
|
||||
}
|
||||
$srcPath = $src . DIRECTORY_SEPARATOR . $file;
|
||||
if (!isset($options['filter']) || call_user_func($options['filter'], $srcPath)) {
|
||||
$dstPath = $dst . DIRECTORY_SEPARATOR . $file;
|
||||
if (is_file($srcPath)) {
|
||||
copy($srcPath, $dstPath);
|
||||
$from = $src . DIRECTORY_SEPARATOR . $file;
|
||||
$to = $dst . DIRECTORY_SEPARATOR . $file;
|
||||
if (!isset($options['beforeCopy']) || call_user_func($options['beforeCopy'], $from, $to)) {
|
||||
if (is_file($from)) {
|
||||
copy($from, $to);
|
||||
if (isset($options['fileMode'])) {
|
||||
chmod($dstPath, $options['fileMode']);
|
||||
chmod($to, $options['fileMode']);
|
||||
}
|
||||
} 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