PHP-파일을 서버의 다른 폴더로 이동


181

웹 사이트 사용자가 더 이상 원하지 않는 경우 이미지를 업로드 한 후 서버에서 이미지를 삭제하도록 허용해야합니다. 나는 이전 unlink에 PHP 에서 함수를 사용하고 있었지만 그 이후에는 이것이 매우 위험하고 보안 문제가 될 수 있다고 들었습니다. (이전 코드 :)

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

대신 파일을 다른 폴더로 간단히 옮기고 싶습니다. 계정에 로그인 할 때마다 파일을 처음 업로드 한 후 오랜 시간이 걸릴 수 있어야합니다. 사용자 이미지를 저장하는 기본 폴더가있는 경우 :

user/

그런 다음 del이라는 폴더 안에 원하지 않는 이미지를 넣을 대상입니다.

user/del/

파일을 다른 폴더로 이동하는 명령이 있습니까? 그래서 그것은 말합니다 :

user/image1.jpg

이사 / 이민

user/del/image1.jpg

답변:


420

이 rename기능은

문서 이름 바꾸기

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

기존 파일을 동일한 위치에 유지하려면 사용해야합니다 copy

문서 복사

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

업로드 된 파일을 이동하려는 경우을 사용합니다 move_uploaded_file. rename이 기능 과 거의 동일하지만 지정된 파일이을 통해 업로드 된 파일인지 확인합니다. POST예를 들어 로컬 파일이 이동되는 것을 방지합니다.

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

문서에서 코드 스 니펫


rename () 및 copy ()의 한 가지 문제는 예를 들어 생성 및 수정 날짜와 같은 모든 메타 데이터가 손실되었다는 것입니다.
— Musikdoktor


17

원본 파일 이름을 유지하면서 새 경로로 파일을 이동하려는 경우. 이것을 사용하십시오 :

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

매력처럼 일했다.
— ucMedia

1

일부 솔루션은 먼저 파일을 위에서 언급 한대로 복사 ()하고 대상 파일이 존재하는 경우 이전 현지화에서 unlink () 파일을 해제합니다. 또한 연결을 해제하기 전에 MD5 체크섬을 확인하여 확실하게 확인할 수 있습니다


1

이동할 함수를 작성하십시오.

function move_file($file, $to){
    $path_parts = pathinfo($file);
    $newplace   = "$to/{$path_parts['basename']}";
    if(rename($file, $newplace))
        return $newplace;
    return null;
}

1

쉘을 사용하여 모든 데이터 파일을 읽은 다음 배열에 할당하십시오. 그런 다음 파일을 최상위 위치로 옮깁니다.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/

PHP를 사용하여 어떻게 작동합니까?
— Nico Haase


-4

shell_exec ( 'mv 파일 이름 dest_filename');


2
스택 오버플로에 오신 것을 환영합니다! 이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다. 설명 주석으로 코드를 복잡하게 만들지 마십시오. 이렇게하면 코드와 설명의 가독성이 떨어집니다!
— Filnor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.