Maison  >  Article  >  développement back-end  >  Comment copier de manière récursive le contenu d’un répertoire en PHP ?

Comment copier de manière récursive le contenu d’un répertoire en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 12:35:02808parcourir

How to Recursively Copy Directory Contents in PHP?

Copier le contenu d'un répertoire avec PHP

Copier l'intégralité du contenu d'un répertoire vers un autre emplacement en PHP peut être une tâche simple, mais se heurter à des problèmes tels que l’erreur de flux introuvable peuvent être frustrants. Pour éviter cela, une approche plus explicite est nécessaire.

Pour surmonter les limitations liées à l'utilisation de caractères génériques dans la fonction copy(), une fonction récursive nommée recurseCopy() peut être utilisée. Cette fonction permet la réplication de structures de répertoires multi-niveaux et de leur contenu.

La fonction recurseCopy() prend trois paramètres :

  • $sourceDirectory : Le répertoire source à copier
  • $destinationDirectory : Le répertoire de destination pour contenir le contenu copié
  • $childFolder (facultatif) : Un nom de dossier sous $destinationDirectory pour organiser les fichiers copiés (utilisés lors de la récursion)

La fonction parcourt les fichiers et sous-répertoires du répertoire source. Si un fichier est rencontré, il est directement copié dans le répertoire de destination. Si un sous-répertoire est trouvé, la fonction s'appelle récursivement pour copier son contenu dans le sous-répertoire correspondant sous le répertoire de destination.

Voici un exemple de code PHP qui utilise la fonction recurseCopy() :

<code class="php">function recurseCopy(string $sourceDirectory, string $destinationDirectory, string $childFolder = ''): void {
    $directory = opendir($sourceDirectory);

    if (is_dir($destinationDirectory) === false) {
        mkdir($destinationDirectory);
    }

    if ($childFolder !== '') {
        if (is_dir("$destinationDirectory/$childFolder") === false) {
            mkdir("$destinationDirectory/$childFolder");
        }

        while (($file = readdir($directory)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            if (is_dir("$sourceDirectory/$file") === true) {
                recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            } else {
                copy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            }
        }

        closedir($directory);

        return;
    }

    while (($file = readdir($directory)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }

        if (is_dir("$sourceDirectory/$file") === true) {
            recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
        else {
            copy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
    }

    closedir($directory);
}

$sourceDirectory = 'my_source_dir';
$destinationDirectory = 'my_destination_dir';

recurseCopy($sourceDirectory, $destinationDirectory);</code>

Ce code copiera récursivement le contenu du répertoire my_source_dir vers le répertoire my_destination_dir, en préservant la structure du répertoire et le contenu du fichier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn