2013-10-02 19 views
116

Tôi cần cho phép người dùng trên trang web của mình xóa hình ảnh của họ khỏi máy chủ sau khi họ tải chúng lên nếu chúng không muốn chúng nữa. Trước đây tôi đã sử dụng hàm unlink trong PHP nhưng từ đó đã được thông báo rằng điều này có thể khá rủi ro và một vấn đề bảo mật. (Mã trước bên dưới :)PHP - Di chuyển tệp vào một thư mục khác trên máy chủ

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

Thay vào đó, bây giờ tôi chỉ muốn di chuyển tệp vào một thư mục khác. Điều này phải có thể được thực hiện một thời gian dài sau khi họ lần đầu tiên tải lên các tập tin để bất cứ lúc nào họ đăng nhập vào tài khoản của họ. Nếu tôi có thư mục chính mà các cửa hàng hình ảnh người dùng (s):

user/ 

rồi trong đó một thư mục có tên del mà là điểm đến để đưa hình ảnh không mong muốn của họ:

user/del/ 

Có lệnh để di chuyển một tập tin vào một thư mục khác nhau? Vì vậy mà nói:

user/image1.jpg 

di chuyển đến/trở thành

user/del/image1.jpg 

Trả lời

284

Chức năng rename thực hiện điều này

docs rename

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

Nếu bạn muốn giữ lại các tập tin hiện có trên cùng một vị trí, bạn nên sử dụng copy

docs copy

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

Nếu bạn muốn di chuyển một tập tin được tải lên sử dụng move_uploaded_file, mặc dù điều này là gần như giống nhau như rename chức năng này cũng kiểm tra các tập tin nhất định là một tập tin được tải lên thông qua POST, điều này ngăn ví dụ mà một tập tin cục bộ được chuyển

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

đang snipet từ docs

+2

Thật đơn giản! cảm ơn :) –

62

Sử dụng rename() chức năng.

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

thật đơn giản! thanks :) –

+1

Một huy hiệu cho những rắc rối của bạn :-) –

0

Tôi muốn di chuyển tệp trong đường dẫn mới với tên tệp gốc. sử dụng điều này:

$source_file = 'foo/image.jpg'; 
$destination_path = 'bar/'; 
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME)); 
Các vấn đề liên quan