【发布时间】:2011-05-27 02:09:23
【问题描述】:
我正在使用此代码递归复制目录(和文件)。我不明白为什么,但是,复制后,我的 $source 文件夹增加了......它有 76.3MB,复制后它会增加到 123 MB!有什么想法吗?
<?php
class MyDirectory {
public function copy($source, $destination, $directoryPermission = 0755, $filePermission = 0644) {
$source = $this->addSlash($source);
$destination = $this->addSlash($destination);
$directoryIterator = new DirectoryIterator($source);
if (!file_exists($destination)) {
mkdir($destination, $directoryPermission);
}
foreach ($directoryIterator as $fileInfo) {
$filePath = $fileInfo->getPathname();
$newDestination = str_replace($source, $destination, $filePath);
if (!$fileInfo->isDot()) {
if ($fileInfo->isFile()) {
copy($filePath, $newDestination);
chmod($newDestination, $filePermission);
} else if ($fileInfo->isDir()) {
mkdir($newDestination, $directoryPermission);
$this->copy($filePath, $newDestination);
}
}
}
}
private function addSlash($directory) {
if (!empty($directory)) {
if (!preg_match('/\/$/', $directory)) {
$directory .= '/';
}
return $directory;
}
}
}
更新:增加源大小没有显着差异!
$ diff -rq mag/ copy-mag/
Only in mag//app/etc: local.xml
谢谢。
【问题讨论】:
-
无意冒犯,但:这是目的地,不是命运:)
-
我想补充一点,用 str_replace 创建来推断目标目录是个坏主意。如果路径的一部分重复,你就完蛋了。
-
Evert,还有其他选择吗?谢谢。
-
你知道还有一个 RecursiveDirectorIterator 吗?
标签: php recursion copy directory