fgetcsv() 함수는 열려 있는 파일에서 한 줄씩 읽어 들여 CSV(Comma-Separated Values) 필드 단위로 파싱하는 PHP 내장 함수입니다. 읽어 들인 각 필드는 하나의 배열 요소로 저장되며, 최종적으로 해당 배열을 반환합니다.
문법(Syntax)
fgetcsv(file_pointer, length, delimiter, enclosure, escape)
매개변수(Parameters)
file_pointer − fopen(), popen(), fsockopen() 등으로 성공적으로 연 파일을 가리키는 유효한 파일 포인터입니다.
length − 한 줄에서 읽을 수 있는 최대 길이입니다. 이 값을 지정하면 지정된 길이만큼만 읽습니다.
delimiter − 필드를 구분하는 문자를 지정합니다. 기본값은 콤마( , )입니다.
enclosure − 필드를 감싸는(enclose) 문자를 설정합니다. 기본값은 큰따옴표(")입니다.
escape − 이스케이프 문자를 설정합니다. 기본값은 백슬래시(\)입니다.
반환 값(Return)
fgetcsv() 함수는 파일에서 읽어 들인 필드들을 요소로 가지는 배열을 반환합니다. 파일 끝(EOF)에 도달하거나 더 이상 읽을 데이터가 없으면 false를 반환합니다.
사용 예제 1: 기본적인 CSV 파일 읽기
다음과 같은 “products.csv” 파일이 있다고 가정해 보겠습니다.
laptop, keyboard, mouse
아래 예제는 이 CSV 파일의 내용을 읽어 화면에 출력하는 코드입니다.
<?php
$file_pointer = fopen("products.csv", "r");
print_r(fgetcsv($file_pointer));
fclose($file_pointer);
?>
출력 결과
Array ( [0] => Laptop [1] => Keyboard [2] => Mouse )
쉼표로 구분된 각 항목이 배열의 개별 요소로 변환되어 반환된 것을 확인할 수 있습니다.
사용 예제 2: 반복문으로 여러 줄 읽기
CSV 파일에 여러 줄의 데이터가 있을 때는 feof() 함수와 while 반복문을 함께 사용해 파일 전체를 순회할 수 있습니다.
다음과 같은 “tutorials.csv” 파일이 있다고 가정해 보겠습니다.
Java, C#, HTML5, CSS3, Bootstrap, Android
아래 예제는 “tutorials.csv” 파일의 내용을 한 줄씩 모두 읽어 출력하는 코드입니다.
<?php
$file_pointer = fopen("tutorials.csv", "r");
while (!feof($file_pointer)) {
print_r(fgetcsv($file_pointer));
}
fclose($file_pointer);
?>
출력 결과
Array ( [0] => Java [1] => C# [2] => HTML5 [3] => CSS3 [4] => Bootstrap [5] => Android )
정리 및 활용 팁
fgetcsv()는 호출될 때마다 파일 포인터가 다음 줄로 이동하므로, 반복문과 함께 사용하면 대용량 CSV 파일도 효율적으로 처리할 수 있습니다.
파일 작업이 끝나면 반드시 fclose()를 호출하여 리소스를 해제하는 것이 좋습니다.
파일 전체를 한 번에 읽어 처리하고 싶다면 fgetcsv()를 반복 호출하는 방식 외에도, PHP 5.3 이상에서 제공되는 str_getcsv()(문자열 파싱)나 SplFileObject 클래스를 활용할 수도 있습니다.
PHP 8.4부터는 escape 매개변수의 기본값에 의존하는 방식이 지원 중단(deprecated)되었으므로, 명시적으로 이스케이프 문자를 지정하는 것이 권장됩니다.