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

PHP is_uploaded_file() 함수 – HTTP POST 파일 업로드 여부 확인하기

PHP의 is_uploaded_file() 함수는 지정한 파일이 HTTP POST 방식으로 업로드되었는지 확인하는 함수입니다. 파일이 HTTP POST를 통해 정상적으로 업로드되었다면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

이 함수는 공격자가 $_FILES 배열을 조작해 서버의 중요한 파일(설정 파일, 비밀번호 파일 등)에 접근하는 것을 막는 보안 검증 목적으로 널리 사용됩니다. 따라서 업로드된 파일을 실제로 처리하기 전에 이 함수로 한 번 더 확인하는 것이 안전합니다.

문법

is_uploaded_file(file_path)

매개변수

  • file_path − 업로드 여부를 확인할 파일의 경로를 지정합니다. 일반적으로 $_FILES['userfile']['tmp_name'] 값을 전달합니다.

반환값

파일이 HTTP POST를 통해 업로드된 경우 TRUE를, 실패한 경우 FALSE를 반환합니다.

다음과 같은 내용을 담은 "new.txt" 파일을 업로드한다고 가정해 보겠습니다.

This is demo text!

예제 1

<?php
    // HTTP POST로 업로드된 파일인지 확인
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        echo "File ". $_FILES['userfile']['name'] ." uploaded successfully!\n";
        // 업로드된 파일의 내용 읽어서 출력
        echo "Reading Contents of the file:\n";
        readfile($_FILES['userfile']['tmp_name']);
    } else {
        echo "File ". $_FILES['userfile']['name'] ." failed in uploading! File upload attack could be the reason!\n";
    }
?>

출력 결과

File new.txt uploaded successfully!
Reading Contents of the file:
This is demo text!

업로드가 성공하면 파일 이름과 함께 성공 메시지가 출력되고, readfile()을 통해 업로드된 파일의 내용도 그대로 화면에 표시됩니다.

이번에는 "details.txt" 파일을 사용한 또 다른 예제입니다.

예제 2

<?php
$file = "details.txt";
if(is_uploaded_file($file)) {
    echo ("Uploaded via HTTP POST");
} else {
    echo ("Not uploaded via HTTP POST");
}
?>

출력 결과

Not uploaded via HTTP POST!

"details.txt"는 HTTP POST 업로드 과정을 거치지 않고 코드에서 직접 지정한 파일이므로 FALSE가 반환되어 위와 같은 결과가 출력됩니다.

참고 사항

  • 업로드된 파일을 최종 위치로 옮길 때는 move_uploaded_file() 함수를 함께 사용하면 더욱 안전합니다.
  • is_uploaded_file() 함수는 PHP 4.0.3 이상 버전에서 사용할 수 있습니다.