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 :
Utilisez Contrairement à la fonction C avec le même nom, renommer code> au lieu de copier code> . p>
renommé code> 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). p>
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 B> et non pour le dossier.
Méfiez-vous d'utiliser Renommer code> à 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
C'est ce que j'utilise usage p> 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);
}
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?
pense que cela devrait faire l'affaire:
http://php.net/manual/fr/function.shell-exec.php espère cette aide. p> p>
Je l'utilise
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);
}
Ce ne travaille que si le chemin des parents existe. Par exemple renommer ("./path/old_folder_name", "./newpath/new_folder_Name"); code> ne fonctionne pas. Dans ce cas, vous devez créer le dir avec mkdir (dirname ("./ newPath / new_folder_name"), null, vrai); code>
$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);
}
Nice ça marche .. Je n'ai pas eu à refacturer ce code :)
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);
}
}
Dupliqué possible de Copiez tous les fichiers et dossiers d'un répertoire à un autre répertoire PHP