web-dev-qa-db-fra.com

PHP - Déplacer un fichier dans un autre dossier du serveur

Je dois autoriser les utilisateurs de mon site Web à supprimer leurs images du serveur après les avoir téléchargés s'ils n'en veulent plus. Auparavant, j'utilisais la fonction unlink dans PHP, mais on m'a dit depuis que cela pouvait être très risqué et constituer un problème de sécurité. (Code précédent ci-dessous :)

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

Au lieu de cela, je souhaite maintenant simplement déplacer le fichier dans un autre dossier. Cela doit pouvoir être fait longtemps après le premier téléchargement du fichier, donc à tout moment, ils se connectent à leur compte. Si j'ai le dossier principal dans lequel sont stockées les images des utilisateurs:

user/

et ensuite dans celui-ci un dossier appelé del qui est la destination pour mettre leurs images non désirées:

user/del/

Existe-t-il une commande permettant de déplacer un fichier dans un autre dossier? Alors que dire:

user/image1.jpg

se déplace vers/devient

user/del/image1.jpg
148
odd_duck

La fonction rename fait cela

renommer les documents

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

Si vous voulez conserver le fichier existant au même endroit, utilisez copy

copie de la documentation

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 identique à rename, cette fonction vérifie également que le fichier donné est un fichier chargé via le POST, cela évite 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 provenant de la documentation

382
MKroeders

Utilisez la fonction renommer () .

rename("user/image1.jpg", "user/del/image1.jpg");
78
Ben Fortune

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));
9
Nabi K.A.Z.

J'ai utilisé Shell pour lire tous les fichiers de données puis assigner à un tableau. Ensuite, je déplace le fichier en première position.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/
1
To Quoc Diep

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;
}
0
Marcelo

Une solution consiste d’abord à copier () le fichier (comme indiqué ci-dessus) et lorsque le fichier de destination existe - fichier unlink () de la localisation précédente. De plus, vous pouvez valider la somme de contrôle MD5 avant de dissocier le lien pour vous en assurer.

0
quardas

utiliser copy () et unlink () function

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}
0
MSA