PHP의 fgets()와 fread() 함수 차이점
PHP에서 파일을 읽을 때 자주 사용되는 fgets() 함수는 한 줄씩 데이터를 읽으며, 개행 문자(newline)를 만나는 순간 읽기를 멈춥니다.
<?php
$file = fopen("test.txt","r");
echo fgets($file);
fclose($file);
?>
위 코드는 'test.txt'라는 텍스트 파일을 읽기 모드(r)로 연 뒤, 파일의 시작 지점부터 개행 문자를 만날 때까지 내용을 읽어 출력하고 마지막으로 파일을 닫습니다. 즉, 첫 번째 줄 전체가 결과로 반환됩니다.
fread() 함수의 동작 방식
반면 fread() 함수는 원시(raw) 데이터를 그대로 읽어들이며, 지정된 바이트 수만큼 읽거나 기본 설정된 바이트 수에 도달하면 읽기를 종료합니다. 이때 개행 문자의 존재 여부는 전혀 영향을 주지 않습니다.
<?php
$file = fopen("test.txt","r");
fread($file,"10");
fclose($file);
?>
위 코드는 'test.txt' 파일을 읽기 모드로 연 후, 시작 지점부터 정확히 10바이트만큼의 데이터를 읽고 파일을 닫습니다. 중간에 개행 문자가 있더라도 10바이트를 모두 읽을 때까지 계속 진행됩니다.
fgets()와 fread(), 언제 어떤 것을 사용해야 할까?
텍스트 파일에서 한 줄 단위로 데이터를 읽고 싶다면 fgets() 함수를 사용하는 것이 적합합니다. 로그 파일 분석이나 설정 파일 파싱처럼 줄 단위 처리가 필요한 경우에 유용합니다.
반면, 줄과 상관없이 특정 크기의 데이터(바이트 단위)를 파일에서 읽어야 한다면 fread() 함수를 사용하는 것이 좋습니다. 이미지, 바이너리 파일 등을 처리할 때 특히 유용합니다.