2013-10-02 18 views
116

Devo consentire agli utenti del mio sito Web di eliminare le loro immagini dal server dopo averle caricate se non le desiderano più. In precedenza utilizzavo la funzione unlink in PHP, ma da allora mi è stato detto che questo può essere piuttosto rischioso e un problema di sicurezza. (Codice precedente qui sotto :)PHP - Spostamento di un file in una cartella diversa sul server

Invece ora voglio semplicemente spostare il file in una cartella diversa. Questo deve poter essere eseguito molto tempo dopo che il file è stato caricato per la prima volta ogni volta che accedono al proprio account. Se ho la cartella principale che memorizza l'immagine degli utenti (s):

user/ 

e poi all'interno di quella di una cartella chiamata del quale è la destinazione di mettere le loro immagini indesiderate:

user/del/ 

Esiste un comando per spostare un file in una cartella diversa? In modo che dicono:

user/image1.jpg 

si sposta/diventa

user/del/image1.jpg 

risposta

284

La funzione rename fa questo

docs rename

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

Se si desidera mantenere il file esistente nello stesso luogo si dovrebbe usare copy

docs copy

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

Se si desidera spostare utilizzare un file caricato il move_uploaded_file, anche se questo è quasi la stessa di rename questa funzione controlla inoltre che il file specificato è un file che è stato caricato tramite il POST, questo impedisce per esempio che un file locale viene spostato

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"); 
    } 
} 

pezzo di codice presentato da docs

+2

Così semplice! Grazie :) –

62

Utilizzare la funzione rename().

rename("user/image1.jpg", "user/del/image1.jpg"); 
+2

così semplice! grazie :) –

+1

Un badge per i tuoi problemi :-) –

0

Si desidera spostare il file in un nuovo percorso mantenendo il nome del file originale. utilizzare questo:

$source_file = 'foo/image.jpg'; 
$destination_path = 'bar/'; 
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));