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
La fonction rename
fait cela
rename('image1.jpg', 'del/image1.jpg');
Si vous voulez conserver le fichier existant au même endroit, utilisez copy
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é
$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
Utilisez la fonction renommer () .
rename("user/image1.jpg", "user/del/image1.jpg");
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));
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/
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;
}
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.
utiliser copy () et unlink () function
$moveFile="path/filename";
if (copy($csvFile,$moveFile))
{
unlink($csvFile);
}