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
4 answers
Funkcja rename
robi to
rename('image1.jpg', 'del/image1.jpg');
Jeśli chcesz zachować istniejący plik w tym samym miejscu, powinieneś użyć 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
$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
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");
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));
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');
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