Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP move_uploaded_file() 함수 완벽 정리 – 업로드 파일을 새 위치로 이동하는 방법

move_uploaded_file() 함수는 HTTP POST 방식으로 업로드된 파일을 지정한 새 위치로 이동하는 PHP 내장 함수입니다. 만약 이동하려는 위치에 동일한 이름의 파일이 이미 존재한다면, 기존 파일은 자동으로 덮어써집니다.

이 함수는 내부적으로 해당 파일이 실제로 유효한 업로드 파일인지(is_uploaded_file() 검사) 확인해 주기 때문에, 단순히 copy()rename()을 사용하는 것보다 보안 측면에서 훨씬 안전합니다.

문법(Syntax)

move_uploaded_file(file_path, moved_path)

매개변수(Parameters)

  • file_path − 이동할 업로드 파일의 경로입니다. 일반적으로 $_FILES['파일명']['tmp_name'] 형태로 임시 저장된 파일 경로를 전달합니다.

  • moved_path − 파일이 이동될 목적지 경로입니다. 디렉터리 경로뿐만 아니라 저장할 파일 이름까지 포함하는 것이 좋습니다.

반환값(Return)

move_uploaded_file() 함수는 파일 이동에 성공하면 true를, 실패하면 false를 반환합니다. 실패 원인으로는 파일이 유효한 업로드 파일이 아니거나, 목적지 디렉터리에 쓰기 권한이 없는 경우 등이 있습니다.

예제(Example)

<?php
   if (move_uploaded_file($_FILES['userfile']['tmp_name'], "/documents/new/")) {
      print "Uploaded successfully!";
   } else {
      print "Upload failed!";
   }
?>

출력(Output)

Upload failed!PHP Notice: Undefined index: userfile in /home/cg/root/8944881/main.php on line 2

출력 결과 분석

위 예제에서 "Upload failed!"가 출력된 이유는 $_FILES['userfile'] 인덱스가 정의되어 있지 않기 때문입니다. 즉, 실제로 파일이 업로드되지 않은 상태에서 함수가 호출되었으므로 false가 반환되고, PHP는 "Undefined index" 공지(Notice)를 발생시킵니다.

참고 사항

  • 업로드 처리 시에는 반드시 <form> 태그에 enctype="multipart/form-data" 속성을 설정해야 $_FILES 배열에 값이 담깁니다.

  • 목적지 경로 끝에 슬래시(/)만 지정하면 의도대로 동작하지 않을 수 있으므로, /documents/new/filename.jpg처럼 파일 이름까지 명시하는 것이 안전합니다.

  • 웹 서버 프로세스가 목적지 디렉터리에 대한 쓰기 권한을 가지고 있는지 사전에 확인해야 합니다.