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로 형식화하고 파일 포인터에 쓰기