묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
fgets() 함수에 대한 질문여...
2003.03.23 23:30
오늘도 파일관련 함수를 열심히 공부하고 있는 중에, fgets()함수에 대한 이상한 점을 발견했
어요..ㅡㅡ;
fgets()함수의 위치와 관련된 것인데요, 제가 테스트 한 내용을 보여드릴께요.
우선 읽어들인 파일명은 test.txt 이구요, test.txt 파일 내용은 ...
동해물과 백두산이 마르고
닳도록 하느님이 보우하사
우리나라만세 무궁화 삼천리
화려강산 대한사람 대한으로
길이 보전하세~!!
이예요.
이 test.txt 파일을 다음과 소스1), 소스2), 소스3) 과 같이 코딩을 해 봤는데, 소스1)과 소스2)
는 정상적으로 실행이 되는데, 소스3)은 엄청나게 페이지가 늦게 열리면서 에러가 발생하더
라구요.
소스3)은 소스1)의 내용을 그대로 while문을 이용하여 코딩한 것이고,
소스2)와 비교했을 때는 fseek($fp,0,SEEK_CUR); 의 위치만 바뀐것인데...
이상하게도 소스3) 만 문제가 발생하네요..ㅡㅡ; 소스 내용을 보여드려볼께요,
소스1)
<?
$fp=fopen("./test.txt","r+");
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
fclose($fp);
?>
소스2)
<?
$fp=fopen("./test.txt","r+");
while(!feof($fp)){
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
}
fclose($fp);
?>
소스3)
<?
$fp=fopen("./test.txt","r+");
while(!feof($fp)){
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
}
fclose($fp);
?>
무슨 차이로 인해서 이런 것인가요?? 초보자인 저의 머리로 생각해 봤을 때, 처리결과가 모두
동일할 것으로 생각이 되는데...
잘 못 된 점과 해결방안 좀 알려주세요.(__)
어요..ㅡㅡ;
fgets()함수의 위치와 관련된 것인데요, 제가 테스트 한 내용을 보여드릴께요.
우선 읽어들인 파일명은 test.txt 이구요, test.txt 파일 내용은 ...
동해물과 백두산이 마르고
닳도록 하느님이 보우하사
우리나라만세 무궁화 삼천리
화려강산 대한사람 대한으로
길이 보전하세~!!
이예요.
이 test.txt 파일을 다음과 소스1), 소스2), 소스3) 과 같이 코딩을 해 봤는데, 소스1)과 소스2)
는 정상적으로 실행이 되는데, 소스3)은 엄청나게 페이지가 늦게 열리면서 에러가 발생하더
라구요.
소스3)은 소스1)의 내용을 그대로 while문을 이용하여 코딩한 것이고,
소스2)와 비교했을 때는 fseek($fp,0,SEEK_CUR); 의 위치만 바뀐것인데...
이상하게도 소스3) 만 문제가 발생하네요..ㅡㅡ; 소스 내용을 보여드려볼께요,
소스1)
<?
$fp=fopen("./test.txt","r+");
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
fclose($fp);
?>
소스2)
<?
$fp=fopen("./test.txt","r+");
while(!feof($fp)){
fseek($fp,0,SEEK_CUR);
$fg=fgets($fp,500);
echo $fg."<br>";
}
fclose($fp);
?>
소스3)
<?
$fp=fopen("./test.txt","r+");
while(!feof($fp)){
$fg=fgets($fp,500);
echo $fg."<br>";
fseek($fp,0,SEEK_CUR);
}
fclose($fp);
?>
무슨 차이로 인해서 이런 것인가요?? 초보자인 저의 머리로 생각해 봤을 때, 처리결과가 모두
동일할 것으로 생각이 되는데...
잘 못 된 점과 해결방안 좀 알려주세요.(__)
3번 실행하면 마지막줄까지 출력하고 이후에 아무것도 출력하지 않으면서 무한루프 돌겁니다.
문제는 EOF를 가리켜야 하는데 fseek()에 의해 EOF포인터가 아니라 파일의 끝을 계속 새로운 포인터로 할당하기 때문입니다.