fgetcsv 함수

(PHP 4, PHP 5, PHP 7, PHP 8)

fgetcsv — 파일 포인터에서 줄을 가져오고 CSV 필드를 구문 분석합니다.


설명

fgetcsv(
    resource $stream,
    ?int $length = null,
    string $separator = ",",
    string $enclosure = "\"",
    string $escape = "\\"
): array|false
                

fgetcsv()가 CSV 형식의 필드에 대해 읽는 행을 구문 분석하고 읽은 필드가 포함된 배열을 반환한다는 점을 제외하면 fgets()와 유사합니다.

메모: 이 함수는 로케일 설정을 고려합니다. LC_CTYPE이 예를 들면 en_US.UTF-8, 1바이트 인코딩의 파일은 이 함수로 잘못 읽을 수 있습니다.


매개변수

stream
파일 포인터는 유효해야 하며 fopen() 또는 fsockopen()에 의해 성공적으로 열린 파일을 가리켜야 합니다(아직 fclose()에 의해 닫히지 않음).
length
CSV 파일에서 찾을 수 있는 가장 긴 줄(문자 수)보다 커야 합니다(후행 줄 끝 문자 허용). 그렇지 않으면 분할이 인클로저 내부에서 발생하지 않는 한 줄은 length 문자 청크로 분할됩니다.

이 매개변수를 생략하거나 0으로 설정하거나 PHP 8.0.0 이상에서 null로 설정하면 최대 줄 길이가 제한되지 않고 약간 느려집니다.

separator
선택적 separator 매개변수는 필드 구분자를 설정합니다(단일 바이트 문자 하나만)
enclosure
선택적 enclosure 매개변수는 필드 인클로저 문자를 설정합니다(단일 바이트 문자 1개만).
escape
선택적 escape 매개변수는 이스케이프 문자(최대 1바이트 문자)를 설정합니다. 빈 문자열("")은 독점 이스케이프 메커니즘을 비활성화합니다.

참고: 일반적으로 enclosure 문자는 두 배로 필드 내부에서 이스케이프됩니다. 그러나 이스케이프 문자를 대안으로 사용할 수 있습니다. 따라서 기본 매개변수 값 ""과 \"는 동일한 의미를 갖습니다. enclosure 문자를 이스케이프하는 것을 제외하고 escape 문자는 특별한 의미가 없습니다.


반환 값

성공 시 읽은 필드를 포함하는 인덱스 배열을 반환하고 실패 시 false를 반환합니다.

메모: CSV 파일의 빈 줄은 단일 null 필드로 구성된 배열로 반환되며 오류로 처리되지 않습니다.

참고: Macintosh 컴퓨터에서 파일을 읽거나 Macintosh 컴퓨터에서 생성한 파일을 읽을 때 PHP가 줄 끝을 제대로 인식하지 못하는 경우 auto_detect_line_endings 런타임 구성 옵션을 활성화하면 문제를 해결하는 데 도움이 될 수 있습니다.


변경 로그

버전 설명
8.0.0 length는 이제 nullable입니다.
7.4.0 이제 escape 매개변수는 독점 이스케이프 메커니즘을 비활성화하기 위해 빈 문자열도 허용합니다.

Examples

예제 #1 CSV 파일의 전체 내용 읽기 및 인쇄

                  
<?php
$row = 1;
if (($handle = fopen("test.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);
}
?>
                  
                

기타

  • str_getcsv() - CSV 문자열을 배열로 구문 분석
  • explode() - 문자열을 문자열로 분할
  • file() - 전체 파일을 배열로 읽습니다.
  • pack() - 데이터를 이진 문자열로 압축
  • fputcsv() - 줄을 CSV로 형식화하고 파일 포인터에 쓰기