181 votes

Comment copier un fichier d'un répertoire à un autre en utilisant PHP ?

Disons que j'ai un fichier test.php en foo ainsi que bar . Comment puis-je remplacer bar/test.php avec foo/test.php en utilisant PHP ? Je suis sous Windows XP. Une solution multiplateforme serait parfaite, mais je préfère Windows.

2voto

A.Raza Points 76

PHP copy() ne fonctionne en fait que si la destination a un fichier à remplacer. Par exemple, si vous copiez un fichier A vers un fichier B, la fonction copy() fonctionnera de la manière suivante ;

$fileA = "foo/fileA.txt";
$fileB = "bar/fileA.txt";
copy($fileA, $fileB);

Ainsi, le copy() nécessite d'avoir un fichier dans le chemin de destination et en fait le chemin de destination doit aussi inclure le nom du fichier sinon il y aura une erreur et ne fonctionnera pas.

Mais si vous n'avez pas de fichier à la destination à remplacer, il suffit de créer un fichier avec ce nom et vous écrirez quelque chose comme ceci ;

$source = "foo/fileA.txt";
$destination = "bar/"; // note how the destination has no file.
$newFile = "somefile.txt";
touch($destination . $newFile);
// then do the copy part
copy($source, $destination.$newFile);

J'ai eu le même problème et j'ai trouvé la solution suivante : créer un fichier à la destination pour que la fonction de copie soit remplacée.

1voto

Makhi Ngubane Points 9

Salut les gars, je voulais aussi ajouter comment copier en utilisant un copier-coller dynamique.

Disons que nous ne connaissons pas le dossier réel que l'utilisateur va créer, mais que nous savons que dans ce dossier, nous avons besoin de fichiers à copier, pour activer une fonction comme la suppression, la mise à jour, les vues, etc.

vous pouvez utiliser quelque chose comme ceci... J'ai utilisé ce code dans un des projets complexes sur lequel je suis actuellement occupé. Je l'ai juste construit moi-même parce que toutes les réponses que j'ai obtenues sur Internet me donnaient une erreur.

    $dirPath1 = "users/$uniqueID"; #creating main folder and where $uniqueID will be called by a database when a user login.
    $result = mkdir($dirPath1, 0755);
            $dirPath2 = "users/$uniqueID/profile"; #sub folder
            $result = mkdir($dirPath2, 0755);
                $dirPath3 = "users/$uniqueID/images"; #sub folder 
                $result = mkdir($dirPath3, 0755);
                    $dirPath4 = "users/$uniqueID/uploads";#sub folder
                    $result = mkdir($dirPath4, 0755);
                    @copy('blank/dashboard.php', 'users/'.$uniqueID.'/dashboard.php');#from blank folder to dynamic user created folder
                    @copy('blank/views.php', 'users/'.$uniqueID.'/views.php'); #from blank folder to dynamic user created folder
                    @copy('blank/upload.php', 'users/'.$uniqueID.'/upload.php'); #from blank folder to dynamic user created folder
                    @copy('blank/delete.php', 'users/'.$uniqueID.'/delete.php'); #from blank folder to dynamic user created folder

Je pense que facebook ou twitter utilise quelque chose comme ça pour construire le tableau de bord de chaque nouvel utilisateur dynamique.....

0voto

Eclipse Points 314

Vous pouvez utiliser à la fois rename() et copy().

J'ai tendance à préférer utiliser renommer si je n'ai plus besoin que le fichier source reste à son emplacement.

0voto

Abdo Host Points 9
<?php  

// Copy the file from /user/desktop/geek.txt  
// to user/Downloads/geeksforgeeks.txt' 
// directory 

// Store the path of source file 
$source = '/user/Desktop/geek.txt';  

// Store the path of destination file 
$destination = 'user/Downloads/geeksforgeeks.txt';  

// Copy the file from /user/desktop/geek.txt  
// to user/Downloads/geeksforgeeks.txt' 
// directory 
if( !copy($source, $destination) ) {  
    echo "File can't be copied! \n";  
}  
else {  
    echo "File has been copied! \n";  
}  

?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X