2013-10-02 23 views
116

Muszę zezwolić użytkownikom na mojej stronie internetowej na usunięcie swoich zdjęć z serwera po ich przesłaniu, jeśli już ich nie chcą. Wcześniej używałem funkcji unlink w PHP, ale od tego czasu powiedziano mi, że może to być dość ryzykowne i stanowić problem z bezpieczeństwem. (Poprzedni kod poniżej :)PHP - Przeniesienie pliku do innego folderu na serwerze

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

Zamiast tego teraz chcę po prostu przenieść plik do innego folderu. Musi to być możliwe długo po tym, jak po raz pierwszy załadują plik, aby mógł się zalogować na swoje konto. Jeśli mam główny folder, który przechowuje obraz użytkowników (s):

user/ 

a następnie w ciągu że folder o nazwie del która jest celem umieścić swoje niechcianych obrazów:

user/del/ 

Czy istnieje polecenie, aby przenieść plik do innego folderu? Tak, że mówią:

user/image1.jpg 

przesuwa się/staje

user/del/image1.jpg 

Odpowiedz

284

Funkcja rename robi to

docs rename

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

Jeśli chcesz zachować istniejący plik w tym samym miejscu, należy użyć copy

docs copy

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

Jeśli chcesz przenieść przesłanego pliku użyć move_uploaded_file, choć jest prawie taka sama jak rename funkcja ta sprawdza również, że dany plik jest plikiem, który został przesłany przez POST, zapobiega to na przykład, że plik lokalny jest przesuwany

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

kod snipet z docs

+2

Tak prosty! dzięki :) –

62

użyć funkcji rename().

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

takie proste! dzięki :) –

+1

Odznaka za twoje kłopoty :-) –

0

Chcę przenieść plik w nowej ścieżce, zachowując oryginalną nazwę pliku. użyj tego:

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