HOWTO · PHP
PHP에 파일이 있는지 확인
이 기사에서는 PHP에 파일이 있는지 확인하는 방법을 소개합니다. file_exists() 함수를 포함합니다.
이 페이지의 내용
PHP의 file_exists()를 사용하면 경로가 현재 존재하는 파일이나 디렉터리를 가리키는지 확인할 수 있습니다. 이 함수는 불리언 값을 반환하므로 그 결과에 따라 다음 동작을 결정할 수 있습니다. 검사는 해당 시점의 경로 상태를 나타내며, 이후 파일 작업의 성공까지 보장하지는 않습니다.
file_exists()로 경로의 존재 여부 확인
경로를 문자열로 전달합니다. 다음 독립 실행형 예제는 임시 파일을 만들고 존재 여부를 확인한 뒤 삭제하므로, 성공 분기가 프로젝트에 원래 있던 파일에 좌우되지 않습니다.
다음 예제를 실행하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
$directory = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'file-exists-' . uniqid('', true);
mkdir($directory);
$file = $directory . DIRECTORY_SEPARATOR . 'example.txt';
file_put_contents($file, 'Ready');
if (file_exists($file)) {
echo "File is ready.\n";
} else {
echo "File was not found.\n";
}
unlink($file);
rmdir($directory);
이 예제의 표시 문자열은 코드 블록의 바이트를 그대로 보존하기 위해 영어로 남아 있습니다. 패킷에 실행 증거가 없으므로 예제의 출력 결과는 제시하지 않습니다. 실제 코드에서는 확인하려는 경로에 같은 조건문 패턴을 적용하면 됩니다. true는 검사 시점에 경로가 존재한다는 뜻이고, false는 PHP가 그 시점에 해당 경로를 찾지 못했다는 뜻입니다.
파일과 디렉터리 구분
file_exists()는 디렉터리에 대해서도 true를 반환합니다. 다음 단계에서 디렉터리인지 확인해야 한다면 is_dir()를 사용하고, 일반 파일인지 확인하려면 is_file()을 사용하세요. 이 검사들은 서로 다른 질문에 답합니다. 경로가 존재한다는 사실만으로는 그 경로의 종류를 알 수 없습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
$path = __DIR__ . DIRECTORY_SEPARATOR . 'uploads';
if (is_dir($path)) {
echo 'The path is a directory.';
} elseif (is_file($path)) {
echo 'The path is a file.';
} else {
echo 'No file or directory was found at this path.';
}
예제에서 __DIR__은 현재 PHP 파일이 들어 있는 디렉터리를 가리킵니다. 애플리케이션에서 확인하려는 위치에 맞게 경로의 마지막 구성 요소를 바꾸세요. 코드 블록의 바이트를 그대로 보존하므로 예제의 표시 문자열은 영어로 남아 있습니다.
경로와 검사 결과를 안전하게 처리하기
상대 경로는 실행 중인 PHP 프로세스의 환경을 기준으로 해석됩니다. 작업 디렉터리가 다르면 같은 문자열이 서로 다른 위치를 가리킬 수 있습니다. 절대 경로는 파일 시스템의 루트에서 시작하므로 의도한 위치를 명확히 나타냅니다. 상대 경로의 결과가 예상과 다르면 문제를 진단하는 동안 getcwd()를 함께 사용해 PHP가 기준으로 삼는 경로를 확인하거나, __DIR__처럼 위치를 알고 있는 디렉터리를 기준으로 경로를 구성하세요.
검사 결과를 다음 단계를 결정하는 데 활용하되, 실제 작업은 실패할 수 있으므로 그 결과도 처리해야 합니다. 검사 후 경로가 바뀔 수 있고, 경로가 존재한다고 해서 프로세스가 이를 읽거나 쓰거나 다른 방식으로 사용할 수 있다는 뜻은 아닙니다. 실제 작업의 결과도 확인하고 애플리케이션에 맞게 실패를 처리하세요.
흔한 제한 사항과 문제 해결
file_exists()가 예상과 달리 false를 반환하면 먼저 경로의 철자와 구성을 확인한 다음, PHP 프로세스의 환경에서 의도한 위치를 가리키는지 살펴보세요. 검사 사이에 경로가 바뀌었는지, 실행 중인 프로세스가 해당 파일 시스템 위치를 확인할 수 있는지도 고려하세요. 이 함수는 경로 존재 여부 검사 결과를 반환할 뿐, false가 나온 원인을 진단하지는 않습니다.
PHP 매뉴얼은 file_exists()가 파일이나 디렉터리의 존재 여부를 확인하며, 결과가 설정된 파일 시스템 환경의 영향을 받는다고 설명합니다. 이 함수를 원격 리소스의 이용 가능 여부를 확인하는 용도로 사용하지 말고, 해당 리소스에 적합한 프로토콜이나 서비스별 확인 방법을 사용하세요. 매개변수, 반환값, 참고 사항은 PHP 매뉴얼의 file_exists() 설명을 참조하세요.
같은 경로를 반복해서 검사할 때는 앞선 결과가 계속 유효하다고 가정하지 마세요. 가능하다면 필요한 작업을 직접 수행하고 그 결과를 처리하세요. 이렇게 하면 검사와 작업 사이에 파일 시스템이 바뀌어도 프로그램이 그 상황을 처리할 수 있습니다.