PHP-przeniesienie pliku do innego folderu na serwerze

Muszę zezwolić użytkownikom na mojej stronie, aby usuwali swoje obrazy 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 problem z bezpieczeństwem. (Poprzedni kod poniżej:)

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

Zamiast tego chcę po prostu przenieść plik do innego folderu. Musi to być możliwe przez długi czas po tym, jak po raz pierwszy przesłali plik, więc za każdym razem, gdy logują się na swoje konto. Jeśli mam główny folder, który przechowuje obrazy użytkowników:

user/

A następnie w folderze o nazwie del, który jest miejscem docelowym do umieszczenia niechcianych obrazów:

user/del/

Czy istnieje polecenie przeniesienia pliku do innego folderu? Czyli:

user/image1.jpg

Przenosi do / staje się

user/del/image1.jpg
Author: odd_duck, 2013-10-02

4 answers

Funkcja rename robi to

Docs rename

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

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

Docs copy

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

Jeśli chcesz przenieść przesłany plik użyj move_uploaded_file, chociaż jest to prawie to samo co rename Ta funkcja sprawdza również, czy dany plik jest plikiem przesłanym przez POST, zapobiega to na przykład przeniesieniu pliku lokalnego

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

Code snipet from docs

 319
Author: MKroeders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-23 19:49:05

Użyj funkcji rename () .

rename("user/image1.jpg", "user/del/image1.jpg");
 72
Author: Ben Fortune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-02 14:32:53

Chcę przenieść plik w nowej ścieżce z zachowaniem oryginalnej nazwy pliku. użyj tego:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
 3
Author: Nabi K.A.Z.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 16:38:29

Shell_exec ('MV filename dest_filename');

 -1
Author: user10395079,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 06:28:13