私はこのコードを使用して、ディレクトリ(およびファイル)の再帰コピーを作成しています。私は理由を理解することができませんが、コピー後、私の$ソースフォルダが増加...それは76.3メガバイト、コピー後に123 MBに増加します!どんなイデアですか?PHP:再帰コピー
<?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
ありがとうございます。
違反はありません:それは目的地ではなく、運命ではありません:) – erenon
str_replaceで目的地のディレクトリを推論するのは悪い考えです。パスの一部が繰り返されると、あなたは戸惑います。 – Evert
ありがとうございました...私はそれを修正しました... – thom