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.