php 입문 | 텍스트 파일 이용 | file를 사용한 파일의 텍스트를 한줄씩 처리


그럼 읽어온 텍스트를 처리하기 위해서는 어떻게 해야 하는 걸까. 여기에는 “파일의 내용을 통째로 읽어 들여, 한줄씩 배열에 정리해 돌려주는” 함수가 준비되어 있기 때문에 이를 이용하면 된다. 이것은 “file"이라는 함수이다.

$변수 = file(파일 지정);

이렇게 하면 인수에 지정된 파일을 읽어 들여, 한줄씩 나누어 정리한 배열을 돌려준다. 이후에는 “$변수"에서 배열의 요소를 차례로 꺼내 처리해 가면 된다.

그러나 일반적으로 이렇게 간단한 작성을 하는 경우는 별로 없다. 왜냐하면 이것만으로는 “파일 로드에 실패할 경우"를 처리할 수 없기 때문이다. 만약 파일로드에 실패하면 그 시점에서 오류가 발생하여 스크립트의 실행을 중단해 버린다. 그렇게 되면 그 이후의 처리 및 표시도 되지 않고 페이지가 도중에 잘려 버린다.

그래서 file과 같이 실행에 실패할 가능성이 있는 경우

$변수 = @file(파일 지정) or 실패 처리;

이런 식으로 쓰는 것이 일반적이다. 함수명 앞에 ‘@‘기호를 붙이면 실행에 실패해도 스크립트를 중단하지 않고 계속 진행을 하게 된다. 또한 함수 뒤에 “or"를 붙이면 실행에 실패했을 때 or 이후의 처리를 수행할 수 있다.

그러면 아래에 간단한 예제를 보도록 하자.

<?php
    $result = "";
    $lines = @file("data.txt") or $result = "파일을 읽을 수 없습니다.";
    if ($lines != null){
        for($i = 0;$i < count($lines);$i++){
            $result .= ($i + 1) . ": " . $lines[$i] . "<br>";
        }
    }
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <p><?php echo $result; ?></p>
    </body>
</html>

이는 data.txt를 읽어 들여, 1행씩 행번호를 붙여 표시한다. 물론 각 행도 제대로 줄 바꿈되어 표시된다. 여기에서는

$lines = @file("data.txt") or $result = "파일을 읽을 수 없습니다.";

이렇게 하여 파일을 로드하고 있다. 그리고 읽어온 $lines 배열을 비울 때까지 반복하고 있다. 비었는지에 대한 여부는

if ($ lines! = null) {......

이렇게 체크를 하고 있다. “null"이라는 것은 “빈” 것을 나타내는 예약어이다. 변수에 값이 설정되지 않은 (즉, 빈) 상태를 나타내는 말이다.

무사히 가져온다면, for($i = 0; $i <count($lines); $i++) 이렇게 하여 $lines에서 한줄씩 텍스트를 읽어 와서 처리를 하고 있다. count($lines)이라고 하는 것은, $lines 요소의 수를 지정하는 것이다. “count"라는 것은 인수에 지정된 배열의 요소 수를 반환하는 함수이다.