PHP의 fflush() 함수는 열려 있는 파일에 대해 버퍼링된 출력을 즉시 파일에 기록(플러시)하는 함수입니다. 일반적으로 파일에 데이터를 쓰면 곧바로 디스크에 저장되지 않고 운영체제나 PHP의 내부 버퍼에 임시로 보관됩니다. fflush()를 호출하면 버퍼에 남아 있는 모든 출력 내용이 파일 핸들이 가리키는 리소스에 강제로 기록되어 데이터가 확실하게 저장됩니다.
문법
fflush(file_pointer)
매개변수
file_pointer − 데이터를 기록할 대상으로,
fopen()으로 열어 둔 유효한 파일 스트림(파일 포인터)을 지정합니다.
반환값
fflush() 함수는 다음 값을 반환합니다.
- TRUE − 버퍼의 내용을 파일에 성공적으로 기록한 경우
- FALSE − 기록에 실패한 경우
예제 1: 기본 사용법
<?php
$file_pointer = fopen("one.txt", "r+");
// 파일에 데이터를 기록
fwrite($file_pointer, "test line");
// fflush()로 버퍼의 내용을 즉시 파일에 기록
fflush($file_pointer);
fclose($file_pointer);
?>
출력(one.txt 파일 내용)
test line
위 예제에서는 fopen()으로 one.txt 파일을 읽기/쓰기(r+) 모드로 연 뒤 fwrite()로 문자열을 기록하고 fflush()를 호출했습니다. 덕분에 fclose()가 실행되기 전이라도 "test line"이 즉시 파일에 저장됩니다.
예제 2: 여러 줄 기록 후 한 번에 플러시하기
이번에는 여러 문장을 연속으로 기록한 뒤 버퍼 전체를 한 번에 플러시하는 예제입니다.
<?php
$file_pointer = fopen("two.txt", "w");
fwrite($file_pointer, "Java is a programming language.\n");
fwrite($file_pointer, "JavaScript is a scripting language.\n");
// 지금까지 버퍼에 쌓인 내용을 강제로 디스크에 기록
fflush($file_pointer);
fclose($file_pointer);
?>
출력(two.txt 파일 내용)
Java is a programming language.
JavaScript is a scripting language.
활용 팁 및 주의 사항
fclose()를 호출하면 버퍼가 자동으로 비워지기 때문에, 짧게 끝나는 스크립트에서는fflush()를 따로 호출하지 않아도 됩니다.배치 작업이나 로그 기록처럼 오래 실행되는 스크립트에서 중간 결과를 즉시 저장해야 할 때
fflush()가 특히 유용합니다. 실행 도중 스크립트가 중단되더라도 이미 플러시된 데이터는 안전하게 보존됩니다.읽기 전용(
"r") 모드로 연 스트림에는 쓸 내용이 없으므로fflush()가 의미가 없습니다. 반드시 쓰기 가능한 스트림에 사용하세요.플러시에 실패하면 FALSE가 반환되므로, 중요한 데이터를 다룰 때는 반환값을 확인하는 것이 좋습니다.