Maison  >  Questions et réponses  >  le corps du texte

PHP : Comment copier toutes les images d'un sous-dossier dans un seul dossier (pas besoin de créer des sous-dossiers !)

Pour la fête d'anniversaire de ma femme, j'ai créé un site Web sur lequel j'ai collecté des images d'invités à la fête, puis j'ai réalisé un joli livre en guise de souvenir. Les invités disposent d'un compte et téléchargent des images dans « leur » dossier. J'ai maintenant un outil qui crée dynamiquement des diaporamas à partir d'images - mais malheureusement, il ne peut pas parcourir les sous-dossiers. Mon objectif principal est donc de copier le fichier image dans un dossier spécifié à partir duquel le diaporama peut le récupérer. J'exécuterais ensuite un script PHP comme cron toutes les 5 minutes environ et afficherais l'image à l'écran pendant toute la durée de la fête.

J'ai trouvé un tas d'extraits de code qui font tous la même chose : Ils copient tous les fichiers et dossiers de manière récursive vers la destination définie. Par exemple. Celui-ci (tiré d'ici : https://code-boxx.com/copy-folder-php/) :

<?php
// (A) COPY ENTIRE FOLDER
function copyfolder ($from, $to, $ext="*") {
  // (A1) SOURCE FOLDER CHECK
  if (!is_dir($from)) { exit("$from does not exist"); }
 
  // (A2) CREATE DESTINATION FOLDER
  if (!is_dir($to)) {
    if (!mkdir($to)) { exit("Failed to create $to"); };
    echo "$to created\r\n";
  }
 
  // (A3) GET ALL FILES + FOLDERS IN SOURCE
  $all = glob("$from$ext", GLOB_MARK);
  print_r($all);
 
  // (A4) COPY FILES + RECURSIVE INTERNAL FOLDERS
  if (count($all)>0) { foreach ($all as $a) {
    $ff = basename($a); // CURRENT FILE/FOLDER
    if (is_dir($a)) {
      copyfolder("$from$ff/", "$to$ff/");
    } else {
      if (!copy($a, "$to$ff")) { exit("Error copying $a to $to$ff"); }
      echo "$a copied to $to$ff\r\n";
    }
  }}
}
 
// (B) GO!
copyfolder("C:/SOURCE/", "C:/TARGET/");
?>

Cela fonctionne bien, mais la vérité est que ce n'est pas ce dont j'ai besoin. Le script copie les fichiers et les dossiers et place les fichiers dans le même sous-dossier dans lequel ils se trouvent. Mon problème est que je ne veux pas créer de sous-dossiers. Je veux juste que le script parcoure tous les sous-dossiers et copie les fichiers image trouvés dans un dossier. Je pensais que cela devrait être une chose facile pour les débutants, mais il semble que j'avais tort.

Quelqu'un peut-il m'aider à y parvenir ? Merci!

P粉877114798P粉877114798288 Il y a quelques jours360

répondre à tous(1)je répondrai

  • P粉083785014

    P粉0837850142024-01-30 00:50:02

    IT Goldman a raison - laissez $to en dehors de l'équation ; j'ai même entièrement supprimé la variable $to et mis mon chemin dans le paramètre de copie :

    0) { foreach ($all as $a) {
        $ff = basename($a); // CURRENT FILE/FOLDER
        if (is_dir($a)) {
          copyfolder("$from$ff/");
        } else {
          if (!copy($a, "C:/TARGET/$ff")) { exit("Error copying $a to C:/TARGET/$ff"); }
          echo "$a copied to C:/TARGET/$ff\r\n";
        }
      }}
    }
     
    // (B) GO!
    copyfolder("C:/SOURCE/");
    ?>

    répondre
    0
  • Annulerrépondre