PHP: рекурсивная копия - PullRequest
       16

PHP: рекурсивная копия

0 голосов
/ 17 декабря 2010

Я использую этот код для рекурсивного копирования каталогов (и файлов). Я не могу понять, почему, но после копирования моя папка $ source увеличивается ... у нее 76,3 МБ, после копии она увеличится до 123 МБ! Любая идея?

<?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

Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2010

Очень сложно определить из исходного кода, что идет не так.

Вместо этого проанализируйте каталог, сравните различия и обновите свой вопрос с результатами. Вы можете использовать инструмент типа Beyond Compare (коммерческий, но доступен 30-дневный пробный период), чтобы узнать, что пошло не так.

...