12
votes

Déplacez tous les fichiers et les dossiers dans un dossier à un autre?

Je veux déplacer tous les fichiers et dossiers dans un dossier dans un autre dossier. J'ai trouvé un code pour copier tous les fichiers dans un dossier dans un autre dossier. Déplacez tous les fichiers d'un dossier sur un autre

// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
  if (in_array($file, array(".",".."))) continue;
  // If we copied this successfully, mark it for deletion
  if (copy($source.$file, $destination.$file)) {
    $delete[] = $source.$file;
  }
}
// Delete all successfully-copied files
foreach ($delete as $file) {
  unlink($file);
}


7 Réponses :


18
votes

Utilisez renommer au lieu de copier .

Contrairement à la fonction C avec le même nom, renommé peut déplacer un fichier d'un système de fichiers à un autre (puisque PHP 4.3.3 sur UNIX et depuis PHP 5.3.1 sous Windows).


2 commentaires

Merci d'avoir donné votre temps précieux pour répondre au problème ... mais je suis sûr qu'il n'est pas pertinent avec le problème ..Votre réponse ne fonctionne que pour Fichiers et non pour le dossier.


Méfiez-vous d'utiliser Renommer à partir de différents disques (EX: EC2 à EFS) lorsque PHP lancera une erreur "copie" comme indiqué dans ce bogue: bugs.php.net/bug.php?id=54097



31
votes

C'est ce que j'utilise xxx pré>

usage p> xxx pré>

Un autre exemple sans supprimer le fichier de destination ou le dossier p>

    function recurse_copy($src,$dst) { 
        $dir = opendir($src); 
        @mkdir($dst); 
        while(false !== ( $file = readdir($dir)) ) { 
            if (( $file != '.' ) && ( $file != '..' )) { 
                if ( is_dir($src . '/' . $file) ) { 
                    recurse_copy($src . '/' . $file,$dst . '/' . $file); 
                } 
                else { 
                    copy($src . '/' . $file,$dst . '/' . $file); 
                } 
            } 
        } 
        closedir($dir); 
    } 


1 commentaires

Je sais que c'est l'ancien post mais toujours - ne devez-vous pas utiliser Directory_Separator au lieu de "/" pour la compatibilité système?



10
votes

pense que cela devrait faire l'affaire: http://php.net/manual/fr/function.shell-exec.php xxx

espère cette aide.


0 commentaires

0
votes

Je l'utilise xxx


0 commentaires

11
votes

Vous avez besoin de la fonction personnalisée:

function Move_Folder_To($source, $target){
    if( !is_dir($target) ) mkdir(dirname($target),null,true);
    rename( $source,  $target);
}


1 commentaires

Ce ne travaille que si le chemin des parents existe. Par exemple renommer ("./path/old_folder_name", "./newpath/new_folder_Name"); ne fonctionne pas. Dans ce cas, vous devez créer le dir avec mkdir (dirname ("./ newPath / new_folder_name"), null, vrai);



1
votes
$src = 'user_data/company_2/T1/';
$dst = 'user_data/company_2/T2/T1/';

rcopy($src, $dst);  // Call function 
// Function to Copy folders and files       
function rcopy($src, $dst) {
    if (file_exists ( $dst ))
        rrmdir ( $dst );
    if (is_dir ( $src )) {
        mkdir ( $dst );
        $files = scandir ( $src );
        foreach ( $files as $file )
            if ($file != "." && $file != "..")
                rcopy ( "$src/$file", "$dst/$file" );

    } else if (file_exists ( $src ))
        copy ( $src, $dst );
                    rrmdir ( $src );
}       

// Function to remove folders and files 
function rrmdir($dir) {
    if (is_dir($dir)) {
        $files = scandir($dir);
        foreach ($files as $file)
            if ($file != "." && $file != "..") rrmdir("$dir/$file");
        rmdir($dir);
    }
    else if (file_exists($dir)) unlink($dir);
}

1 commentaires

Nice ça marche .. Je n'ai pas eu à refacturer ce code :)



1
votes

Je pense que les réponses ne sont pas complètes pour moi, Beacuse Directory_separator em> ne sont pas définies sur une réponse (Thans to Edgar Aivars pour que je te souvienne!), mais je veux écrire ma solution pour bouger (renommer), copier et supprimer des structures de répertoires (basé sur cette post-information, les crédits sont destinés à vous!).

defined('DS') ? NULL : define('DS',DIRECTORY_SEPARATOR);

function full_move($src, $dst){
    full_copy($src, $dst);
    full_remove($src);
}

function full_copy($src, $dst) {
    if (is_dir($src)) {
        @mkdir( $dst, 0777 ,TRUE);
        $files = scandir($src);
        foreach($files as $file){
            if ($file != "." && $file != ".."){
                full_copy("$src".DS."$file", "$dst".DS."$file");
            }
        }
    } else if (file_exists($src)){
        copy($src, $dst);
    }
}

function full_remove($dir) {
    if (is_dir($dir)) {
        $files = scandir($dir);
        foreach ($files as $file){
            if ($file != "." && $file != ".."){
                full_remove("$dir".DS."$file");
            }
        }
        rmdir($dir);
    }else if (file_exists($dir)){
        unlink($dir);
    }
}


0 commentaires