PHP에서 CSV 파일 가져오기
PHP에서는 fopen과 fgetcsv 함수를 조합하면 CSV 파일을 아주 간단하게 가져와 화면에 출력할 수 있습니다. 아래 예제 코드를 확인해 보세요.
<?php
$row = 1;
if (($handle = fopen("name_of_file.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>이 코드를 실행하면 CSV 파일의 전체 내용이 브라우저 화면에 출력됩니다.
코드 동작 원리 살펴보기
위 코드가 어떻게 동작하는지 단계별로 자세히 알아보겠습니다.
1. 행 카운터 초기화
$row 변수를 1부터 시작합니다. 일반적으로 CSV 파일의 첫 번째 행(0번째 행)에는 헤더 또는 컬럼 이름이 들어 있기 때문에, 실제 데이터는 1행부터 처리하는 것이 좋습니다.
2. 파일 열기
fopen 함수를 사용해 대상 CSV 파일을 읽기 모드("r")로 엽니다. 파일이 정상적으로 열리지 않으면 FALSE를 반환하므로, !== FALSE 조건으로 오류 여부를 먼저 검사합니다.
3. 데이터 읽기
fgetcsv 함수를 호출해 CSV 파일의 각 행을 한 줄씩 읽어 배열로 반환받습니다. 두 번째 매개변수인 1000은 한 줄에서 읽을 수 있는 최대 길이(문자 수)를 지정한 것이며, 세 번째 매개변수인 쉼표(",")는 필드 구분자(delimiter)를 의미합니다.
4. 필드 개수 및 내용 출력
count($data)로 현재 행에 포함된 컬럼(필드)의 개수를 구하고, for 반복문을 통해 해당 행의 모든 필드 내용을 하나씩 화면에 출력합니다.
5. 파일 닫기
모든 행의 처리가 끝나면 fclose 함수로 파일 핸들을 닫아 시스템 리소스를 해제합니다.
참고 팁
fgetcsv의 세 번째 매개변수는 기본값이 쉼표이지만, 탭이나 세미콜론 등 다른 구분자를 사용하는 CSV 파일도 손쉽게 처리할 수 있습니다. 또한 PHP 5.3 이상에서는 SplFileObject 클래스를 활용하면 객체 지향적인 방식으로 더 깔끔하게 CSV 파일을 다룰 수 있습니다.