PHP - Déplacer un fichier dans un dossier différent sur le serveur

186

Je dois autoriser les utilisateurs de mon site Web à supprimer leurs images du serveur après les avoir téléchargées s'ils ne les veulent plus. J'utilisais auparavant la unlinkfonction en PHP, mais on m'a dit depuis que cela peut être assez risqué et poser un problème de sécurité. (Code précédent ci-dessous :)

if(unlink($path.'image1.jpg')){ 
     // deleted
}

Au lieu de cela, je veux simplement déplacer le fichier dans un dossier différent. Cela doit pouvoir être fait longtemps après avoir téléchargé le fichier pour la première fois, donc à chaque fois qu'ils se connectent à leur compte. Si j'ai le dossier principal qui stocke les images des utilisateurs:

user/

puis dans ce dossier appelé del qui est la destination pour mettre leurs images indésirables:

user/del/

Existe-t-il une commande pour déplacer un fichier dans un autre dossier? Alors ça dit:

user/image1.jpg

se déplace vers / devient

user/del/image1.jpg
canard étrange
la source

Réponses:

433

La renamefonction fait cela

docs renommer

rename('image1.jpg', 'del/image1.jpg');

Si vous souhaitez conserver le fichier existant au même endroit, vous devez utiliser copy

copie de documents

copy('image1.jpg', 'del/image1.jpg');

Si vous souhaitez déplacer un fichier téléchargé, utilisez le move_uploaded_file, bien que ce soit presque le même que renamecette fonction vérifie également que le fichier donné est un fichier qui a été téléchargé via le POST, cela empêche par exemple qu'un fichier local soit déplacé

docs move_uploaded_file

$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

extrait de code de la documentation

MKroeders
la source
1
Un problème avec rename () et copy () est que vous avez perdu toutes les métadonnées telles que la date de création et de modification par exemple .. gardez cela à l'esprit.
Musikdoktor
97

Utilisez la fonction renommer () .

rename("user/image1.jpg", "user/del/image1.jpg");
Ben Fortune
la source
18

Si vous souhaitez déplacer le fichier dans un nouveau chemin avec conserver le nom de fichier d'origine. utilisez ceci:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
Nabi KAZ
la source
A travaillé comme un charme.
ucMedia
2

J'utilise le shell pour lire tous les fichiers de données, puis les affecter au tableau. Ensuite, je déplace le fichier en position supérieure.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/
Vers Quoc Diep
la source
Veuillez expliquer cela plus en détail - comment cela pourrait-il fonctionner avec PHP?
Nico Haase
1

Une solution consiste d'abord à copier () le fichier (comme mentionné ci-dessus) et lorsque le fichier de destination existe - le fichier unlink () de la localisation précédente. De plus, vous pouvez valider la somme de contrôle MD5 avant de dissocier pour être sûr

quardas
la source
1

Créez une fonction pour la déplacer:

function move_file($file, $to){
    $path_parts = pathinfo($file);
    $newplace   = "$to/{$path_parts['basename']}";
    if(rename($file, $newplace))
        return $newplace;
    return null;
}
Marcelo
la source
0

utilisation copy () et unlink () fonction

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}
Arunprabakaran M
la source
-4

shell_exec ('mv filename dest_filename');

user10395079
la source
2
Bienvenue dans Stack Overflow! Bien que cet extrait de code puisse résoudre la question, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, cela réduit la lisibilité du code et des explications!
Filnor