본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP pathinfo() — 경로 정보 분해 · dirname · basename · extension 완전 정리

by 왕진 2026. 7. 11.
반응형

 

 

Web Development · PHP 파일 경로 함수

PHP pathinfo() — 파일 경로를 분해하는 함수

dirname · basename · extension · filename · __FILE__ 매직 상수 완전 정리
시작 오늘 분석할 코드

pathinfo()는 파일 경로 문자열을 dirname(디렉토리), basename(파일명+확장자), extension(확장자), filename(확장자 제외 파일명) 4가지로 분해해 반환하는 함수입니다. 두 번째 인수로 원하는 항목 하나만 지정할 수도 있습니다. __FILE__은 현재 파일의 절대 경로를 담은 PHP 매직 상수입니다.

<?php $info = pathinfo(__FILE__); // __FILE__ = 현재 실행 중인 파일의 절대 경로 // 예: /var/www/html/test.php print_r($info); // Array // ( // [dirname] => /var/www/html // [basename] => test.php // [extension] => php // [filename] => test // ) ?>
실제 출력 미리보기
pathinfo("/var/www/html/photo.jpg") 분해 결과
dirname
/var/www/html
basename
photo.jpg
extension
jpg
filename
photo
용어 용어 정리
pathinfo()경로 문자열을 dirname/basename/extension/filename 배열로 분해
dirname파일이 속한 디렉토리 경로 — "/var/www/html"
basename디렉토리를 제외한 파일명 — "photo.jpg"
extension확장자(점 제외) — "jpg"
filename확장자 없는 파일명 — "photo". PHP 5.2.0+
__FILE__현재 파일의 절대 경로 매직 상수. 동적으로 변하지 않음
PATHINFO_상수두 번째 인수 — PATHINFO_DIRNAME/BASENAME/EXTENSION/FILENAME
basename() 함수pathinfo의 basename만 추출하는 독립 함수 — 두 번째 인수로 접미사 제거 가능

1 두 번째 인수 — 원하는 키 하나만 가져오기
PATHINFO_상수로 단일 값 추출

두 번째 인수 없이 호출하면 배열을 반환합니다. PATHINFO_EXTENSION 처럼 상수를 넣으면 해당 값만 문자열로 반환합니다. 확장자 검사 등 특정 항목만 필요할 때 자주 사용합니다.

$path = "/var/www/uploads/photo.jpg"; // 전체 배열 $info = pathinfo($path); echo $info['extension']; // jpg // 원하는 키만 바로 추출 echo pathinfo($path, PATHINFO_EXTENSION); // jpg echo pathinfo($path, PATHINFO_FILENAME); // photo echo pathinfo($path, PATHINFO_DIRNAME); // /var/www/uploads echo pathinfo($path, PATHINFO_BASENAME); // photo.jpg

2 업로드 파일 확장자 검사
extension으로 허용 파일 형식 체크
$allowed = ['jpg', 'jpeg', 'png', 'gif']; $filename = $_FILES['upload']['name']; $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if (!in_array($ext, $allowed)) { die("허용되지 않은 파일 형식: {$ext}"); }
⚠️ 확장자 검사만으로는 보안이 충분하지 않습니다. photo.php.jpg 처럼 위장할 수 있으므로, MIME 타입 검사(finfo_file)도 함께 사용하는 것이 권장됩니다.

3 __FILE__과 활용 패턴
현재 파일 경로 기반으로 상대 경로 구성
// __FILE__: 현재 파일의 절대 경로 echo __FILE__; // /var/www/html/includes/util.php // 현재 파일의 디렉토리 기준으로 설정 파일 로드 $base = pathinfo(__FILE__, PATHINFO_DIRNAME); // 또는 dirname(__FILE__) 과 동일 require $base . '/config.php'; require $base . '/../db.php';
※ PHP 5.3+에서는 __DIR__ 매직 상수가 pathinfo(__FILE__, PATHINFO_DIRNAME)과 동일한 역할을 합니다. 현대 PHP에서는 __DIR__을 더 많이 씁니다.

 

반응형

 

4 확장자 변경 — 동일한 파일명에 다른 확장자
파일 변환 시 결과물 경로 구성
$original = "uploads/photo.png"; $dir = pathinfo($original, PATHINFO_DIRNAME); $name = pathinfo($original, PATHINFO_FILENAME); $converted = $dir . '/' . $name . '.jpg'; // → "uploads/photo.jpg" echo "변환 결과 경로: {$converted}";

5 basename() 독립 함수 — 접미사 제거 기능
basename($path, $suffix) — 특정 접미사를 제거한 파일명 추출
// basename() — 단독 함수 echo basename("/var/www/html/photo.jpg"); // photo.jpg // 두 번째 인수로 제거할 접미사 지정 echo basename("/var/www/html/photo.jpg", ".jpg"); // photo (확장자 제거) // dirname() 단독 함수 echo dirname("/var/www/html/photo.jpg"); // /var/www/html

6 자주 하는 실수
실수 증상 해결
확장자 검사 시 대소문자 미통일 Photo.JPG가 허용 목록 in_array 통과 못 함 strtolower(pathinfo($f, PATHINFO_EXTENSION))
확장자 없는 파일에서 extension 없음 배열에 extension 키 자체가 없음 $info['extension'] ?? '' 로 기본값 처리
확장자 검사만으로 업로드 허용 fake.php.jpg 같은 위장 파일 업로드 가능 MIME 타입(finfo_file) 병행 검사
__FILE__ 대신 SCRIPT_FILENAME 사용 포함(include)된 파일에서 경로가 달라짐 __FILE__은 항상 해당 파일 자신의 경로
dirname()과 PATHINFO_DIRNAME 혼용 혼란 pathinfo($p, PATHINFO_DIRNAME) = dirname($p) — 동일 단순 디렉토리 추출은 dirname() 단독 사용도 가능

핵심 한 줄 요약

pathinfo($path)경로 분해 → dirname / basename / extension / filename 배열
PATHINFO_EXTENSION두 번째 인수로 특정 키만 추출 — 가장 자주 쓰는 패턴
__FILE__현재 파일 절대 경로 매직 상수 — pathinfo(__FILE__) 로 분해
현대 PHPdirname() 단독, __DIR__ 상수가 많이 쓰임 — pathinfo와 동일
보안확장자 검사만으론 부족 — MIME 타입 병행 검사 권장

Tags

#PHP #pathinfo #경로정보 #dirname #basename #extension #__FILE__ #PHP파일함수 #PHP함수 #PHP학습 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, pathinfo, 경로정보, dirname, basename, extension, filename, __FILE__, PHP파일함수, PHP함수, PHP학습, 웹개발, 티스토리
반응형

댓글