2011-11-21 14 views
11

Tôi có biểu mẫu tải lên nơi người dùng có thể tải lên hình ảnh hiện đang được tải lên thư mục mà tôi gọi là 'temp' và vị trí của họ được lưu trong một mảng có tên $ _SESSION ['uploaded_photos']. Khi người dùng nhấn nút 'Trang tiếp theo', tôi muốn nó di chuyển các tệp vào một thư mục mới được tạo động ngay trước đó.Làm cách nào để chuyển tệp sang thư mục khác bằng php?

if(isset($_POST['next_page'])) { 
    if (!is_dir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id'])) { 
    mkdir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id']); 
    } 

    foreach($_SESSION['uploaded_photos'] as $key => $value) { 
    $target_path = '../images/uploads/listers/'.$_SESSION['loggedin_lister_id'].'/'; 
    $target_path = $target_path . basename($value); 

    if(move_uploaded_file($value, $target_path)) { 
     echo "The file ". basename($value). " has been uploaded<br />"; 
    } else{ 
     echo "There was an error uploading the file, please try again!"; 
    } 

    } //end foreach 

} //end if isset next_page 

Một ví dụ cho một $ value đang được sử dụng là:

../images/uploads/temp/IMG_0002.jpg

Và một ví dụ về một $ target_path đang được sử dụng là:

../images/uploads/listers/186/IMG_0002.jpg

Tôi có thể xem tệp đang nằm trong thư mục tạm thời, cả hai đường dẫn này đều tốt cho tôi và tôi đã kiểm tra để đảm bảo rằng hàm mkdir thực sự đã tạo thư mục mà nó hoạt động tốt.

Làm cách nào để di chuyển tệp sang thư mục khác bằng php?

Trả lời

20

Khi tôi đọc kịch bản của bạn, có vẻ như bạn đã xử lý việc tải lên và chuyển các tệp vào thư mục 'temp' của mình và bây giờ bạn muốn di chuyển tệp khi họ hoàn thành một hành động mới (nhấp vào nút Tiếp theo).

Theo như PHP có liên quan - các tệp trong 'temp' của bạn không còn được tải lên tệp nữa, vì vậy bạn không còn có thể sử dụng move_uploaded_file nữa.

Tất cả bạn cần làm là sử dụng rename:

if(isset($_POST['next_page'])) { 
    if (!is_dir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id'])) { 
    mkdir('../images/uploads/listers/'.$_SESSION['loggedin_lister_id']); 
    } 

    foreach($_SESSION['uploaded_photos'] as $key => $value) { 
    $target_path = '../images/uploads/listers/'.$_SESSION['loggedin_lister_id'].'/'; 
    $target_path = $target_path . basename($value); 

    if(rename($value, $target_path)) { 
     echo "The file ". basename($value). " has been uploaded<br />"; 
    } else{ 
     echo "There was an error uploading the file, please try again!"; 
    } 

    } //end foreach 

} //end if isset next_page