PHP Déplacement et copie de fichiers et de répertoires


Exemple

Copier des fichiers

copy copie le fichier source dans le premier argument à la destination dans le second argument. La destination résolue doit se trouver dans un répertoire déjà créé.

if (copy('test.txt', 'dest.txt')) {
    echo 'File has been copied successfully';
} else {
    echo 'Failed to copy file to destination given.'
}

Copie de répertoires, avec récursivité

La copie de répertoires est assez similaire à la suppression de répertoires, sauf que pour les fichiers, la copy au lieu de la unlink est utilisée, tandis que pour les répertoires, mkdir au lieu de rmdir est utilisé au début au lieu d'être à la fin de la fonction.

function recurse_delete_dir(string $src, string $dest) : int {
    $count = 0;

    // ensure that $src and $dest end with a slash so that we can concatenate it with the filenames directly
    $src = rtrim($dest, "/\\") . "/";
    $dest = rtrim($dest, "/\\") . "/";

    // use dir() to list files
    $list = dir($src);

    // create $dest if it does not already exist
    @mkdir($dest);

    // store the next file name to $file. if $file is false, that's all -- end the loop.
    while(($file = $list->read()) !== false) {
        if($file === "." || $file === "..") continue;
        if(is_file($src . $file)) {
            copy($src . $file, $dest . $file);
            $count++;
        } elseif(is_dir($src . $file)) {
            $count += recurse_copy_dir($src . $file, $dest . $file);
        }
    }

    return $count;
}

Renommer / Déplacer

Renommer / Déplacer des fichiers et des répertoires est beaucoup plus simple. Les répertoires entiers peuvent être déplacés ou renommés en un seul appel, en utilisant la fonction rename .

  • rename("~/file.txt", "~/file.html");

  • rename("~/dir", "~/old_dir");

  • rename("~/dir/file.txt", "~/dir2/file.txt");