int fseek ( resource $handle , int $offset [, int $whence ] )
(PHP 4, PHP 5)

이 함수는 두 번째 인자와 세 번째 인자에 의해 결정되는 새로운 위치로 이동 시킵니다. offset 인자는 파일의 처음 위치부터 byte 수로 계산되는 값입니다. 성공시 "0"을, 실패시 "-1"를 반환하며, 세 번째 인자는 다음과 같은 상수를 사용합니다.

상 수 설 명
SEEK_SET 파일 포인터 첫 위치에서 offset 바이트만큼 위치로 이동합니다.
SEEK_CUR 현제 파일 포인터의 위치에서 offset 바이트만큼 위치로 이동합니다.
SEEK_END 파일 포인터 마지막 위치에서 offset 바이트만큼 위치로 이동합니다.

SEEK_END상수는 마지막 위치에서 offset 만큼 바이트 수로 계산되기 때문에 음수를 지정하며, 세 번째 인자를 생략할 경우 SEEK_SET로 간주하여 실행하게 됩니다.

<?php
 /*
 test.txt파일 내용
 1. 안녕하세요. 하보니입니다.
 2. rewind함수 테스트입니다.
 3. 1234567890
 4. abcdefghijklmnopqrstuq
 5. asdfghjkl
 6. qwertyuiop
 7. qwertyuiop.BMP
 */

 $file = 'test.txt';
 if($fp = fopen($file,'r')){
    if(is_resource($fp)){

        // 1024는 한줄을 읽어 오게 해줍니다.
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n");
        }

        // 포인터 처음 위치에서 offset 2만큼 이동후 출력합니다.
        fseek($fp,2);
        if($fname = fgets($fp,1024)){
            echo $fname ."<br />\n");
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }

        // 포인터 처음 위치에서 offset 3만큼 이동후 출력합니다.
        // 포인터 첫 위치부터 다시 출력합니다.
        fseek($fp,3,SEEK_SET);
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }

        // 현제 포인터 위치에서 offset 3만큼 이동후 출력합니다.
        fseek($fp,3,SEEK_CUR);
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        } 
    } // end is_resource
    fclose($fp);
 } // end fp

 /* 결과:
 1. 안녕하세요. 하보니입니다. 
 안녕하세요. 하보니입니다.
 2. rewind함수 테스트입니다. 
 3. 1234567890 
 4. abcdefghijklmnopqrstuq 
 안녕하세요. 하보니입니다.
 2. rewind함수 테스트입니다. 
 3. 1234567890 
 4. abcdefghijklmnopqrstuq 
 asdfghjkl
 6. qwertyuiop 
 */
 ?>

SEEK_END 상수를 사용한 예입니다.

<?php
 /*
 test.txt파일 내용
 1. 안녕하세요. 하보니입니다.
 2. rewind함수 테스트입니다.
 3. 1234567890
 4. abcdefghijklmnopqrstuq
 5. asdfghjkl
 6. qwertyuiop
 7. qwertyuiop.BMP
 */

 $file = 'test.txt';
 if($fp = fopen($file,'r')){
    if(is_resource($fp)){

        // 1024는 한줄을 읽어 오게 해줍니다.
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n");
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n");
        }

        // 끝에서 3문자만 출력합니다.
        fseek($fp,-3,SEEK_END);
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
    } // end is_resource
    fclose($fp);
 } // end fp
 
 /* 결과:
 1. 안녕하세요. 하보니입니다. 
 2. rewind함수 테스트입니다. 
 BMP
 */
 ?>

<?php
 /*
 test.txt파일 내용
 1. 안녕하세요. 하보니입니다.
 2. rewind함수 테스트입니다.
 3. 1234567890
 4. abcdefghijklmnopqrstuq
 5. asdfghjkl
 6. qwertyuiop
 7. qwertyuiop.BMP
 */

 $file = 'test.txt';
 if($fp = fopen($file,'r')){
    if(is_resource($fp)){

        // 1024는 한줄을 읽어 오게 해줍니다.
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n");
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n");
        }

        // 끝에서 10문자만 출력합니다.
        fseek($fp,-10,SEEK_END);
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }

        // 포인터 처음 위치에서 offset 3만큼 이동후 출력합니다.
        // 포인터 첫 위치부터 다시 출력합니다.
        fseek($fp,3,SEEK_SET);
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }
        if($fname = fgets($fp,1024)){
            echo $fname."<br />\n";
        }  
    } // end is_resource
    fclose($fp);
 } // end fp
 
 /* 결과:
 1. 안녕하세요. 하보니입니다. 
 2. rewind함수 테스트입니다. 
 tyuiop.BMP
 안녕하세요. 하보니입니다. 
 2. rewind함수 테스트입니다. 
 3. 1234567890 
 4. abcdefghijklmnopqrstuq 
 5. asdfghjkl 
 6. qwertyuiop
 */
 ?>

0 댓글