[PHP] PHP7 기초 - 4. php 코드로 텍스트 파일 만들기

yunulog·2022년 10월 7일
0

PHP7

목록 보기
4/6

서기의 PHP7 강의를 토대로 정리하였습니다!

파일 쓰기, 읽기, 닫기 코드

FOPEN

fopen(”파일명”, “모드”); → 파일을 해당 모드로 생성

  • r : 읽기(read)
  • w : 쓰기(write)
  • a: 추가하기(append)

fopen 함수를 쓸 때 리눅스나 맥 환경에서 Permission denied 오류가 나는 경우가 있다. 그땐 터미널을 통해 다음 코드를 실행해보면 된다.
sudo chmod -R 777 (디렉토리)

ex) sudo chmod -R 777 /Applications/XAMPP/xamppfiles/htdocs

FWRITE

fwrite(변수, “추가할 텍스트”); → 변수에 할당된 파일에 텍스트 쓰기

FCLOSE

fclose(변수); → 변수에 할당된 파일 닫기

FREAD

fread(변수, 글자수); → 변수에 할당된 파일에서 앞에서부터 (글자수)만큼 읽어오기

예시

$fp = fopen("8.txt", "w");

fwrite($fp, "동해물과 백두산이 마르고 닳도록");

fclose($fp);

→ 8.txt 파일을 쓰기 모드로 생성
→ 8.txt 파일에 "동해물과 백두산이 마르고 닳도록" 쓰기
→ 파일 닫기

w 모드는 코드를 실행할 때마다 파일을 새로 만듦(아무리 많이 해도 같은 결과)
a 모드는 코드를 실행할 때마다 파일에 텍스트를 추가함(코드를 실행한 만큼 텍스트가 추가되어있음)

ex)
w 모드로 코드 5번 실행하면
동해물과 백두산이 마르고 닳도록
a 모드로 코드 5번 실행하면
동해물과 백두산이 마르고 닳도록동해물과 백두산이 마르고 닳도록동해물과 백두산이 마르고 닳도록동해물과 백두산이 마르고 닳도록동해물과 백두산이 마르고 닳도록


$fp = fopen("8.txt", "r");

$a = fread($fp, 5);

echo $a;

fclose($fp);

→ 8.txt 파일을 읽기 모드로 생성
→ 파일 앞에서부터 5글자 만큼 읽어오기
→ 출력
→ 파일 닫기

파일을 이용한 메모장 만들기

입력창 만들기

memo.php 파일을 생성하고 코드를 추가한다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>메모장</title>
</head>
<body>
  <form action="memoSave.php">
    <div style="text-align: center;">
      <table border='1' align="center">
        <tr>
          <td>이름</td>
          <td style="text-align:left;"><input type="text" name="name"></td>
        </tr>
        <tr>
          <td>이메일</td>
          <td style="text-align:left;"><input type="text" name="email"></td>
        </tr>
        <tr>
          <td>내용</td>
          <td><input type="text" name="memo" style="width:400px;"></td>
        </tr>
      </table>
      <input type="submit" value="저장" style="margin-top: 10px;">
    </div>  
  </form>

</body>
</html>

내용을 입력하고 저장 버튼을 클릭하면 memoSave.php 파일이 실행된다.

memoSave.php 파일을 생성하고 코드를 추가한다.

<?php

  $fp = fopen("memo.txt", "a");

  $content = $_REQUEST['name']."///".$_REQUEST['email']."///".$_REQUEST['memo']."\r\n";

  echo $content;

  fwrite($fp, $content);

?>

→ memo.txt 파일을 a 모드로 생성한다
→ 콘텐츠 “이름 /// 이메일 /// 내용 (줄바꿈)” 텍스트를 콘텐츠라는 변수에 추가한다.
→ 콘텐츠 변수를 출력한다.
→ memo.txt 파일에 콘텐츠 텍스트를 쓴다.

이 과정은 페이지를 새로고침 할 때 마다 반복된다.
예를 들어 페이지를 5번 새로고침 하면 memo.txt 파일에 다음과 같이 추가된다.

홍길동///aa@naver.com///안녕하세요
홍길동///aa@naver.com///안녕하세요
홍길동///aa@naver.com///안녕하세요
홍길동///aa@naver.com///안녕하세요
홍길동///aa@naver.com///안녕하세요

텍스트 파일을 표로 나타내기

memo.php 파일에서 입력창 아래에 memo.txt에 입력된 내용을 표로 나타내려 한다.

memo.php 파일의 form 태그 아래 다음 코드를 추가한다.

<table border="1" width="800">
    <tr>
      <th>이름</th>
      <th>이메일</th>
      <th>내용</th>
    </tr>

    <?php
      $list = file("memo.txt");
      foreach($list as $d) {
        $data = explode("///", $d)
				// memo.txt에서 '///'을 기준으로 값을 쪼갬
    ?>

    <tr>
      <td><?=$data[0]?></td>
      <td><?=$data[1]?></td>
      <td><?=$data[2]?></td>
    </tr>
  <?php
    }
  ?>
</table


표에 텍스트 입력 일시 추가하기

이 표에 입력한 당시 날짜를 추가하려 한다.

memoSave.php 파일에 다음 코드를 추가한다.

$now = date("Y-m-d H:i:s");

$content = $_REQUEST['name']."///".$_REQUEST['email']."///".$_REQUEST['memo'].**"///".$now.**"\r\n";

date 함수는 현재 날짜를 출력해준다.

  • Y-m-d = 2022-10-07
  • y-m-d = 22-10-07
  • H : 24시간 기준, h : 12시간 기준

content 변수에는 now 변수를 추가해준다.

memo.php 파일의 테이블 태그는 다음과 같이 수정한다.

<table border="1" width="800">
    <tr>
      <th>이름</th>
      <th>이메일</th>
      <th>내용</th>
      <th>저장일시</th>
    </tr>

    <?php
      $list = file("memo.txt");
      foreach($list as $d) {
        $data = explode("///", $d)
    ?>

    <tr>
      <td><?=$data[0]?></td>
      <td><?=$data[1]?></td>
      <td><?=$data[2]?></td>
      <td><?=$data[3]?></td>
    </tr>
  <?php
    }
  ?>
</table>

이와 같이 날짜와 시간이 출력된다.


표 내용 (배열) 역순으로 나타내기

그런데 표의 순서를 최신 정보부터 나타내고 싶다고 하자.
즉, 가장 나중에 입력한 홍길동이 표 가장 위로, 가장 먼저 입력한 홍길금이 표 가장 아래로 나타나게끔 수정하려 한다.

array_reverse 함수를 이용하면 배열을 역순으로 정렬할 수 있다.

memo.php 파일에 다음 코드를 추가 및 수정한다.

$a = array_reverse($list);

foreach($a as $d) {
  $data = explode("///", $d)

그럼 이와 같이 순서가 역순으로 정렬되며 새로 값을 추가할때마다 표 맨 위에 나타난다.


이 표에서 상위 5개만 보여주려고 한다.

if(조건) break; → 조건을 충족하지 않는 순간 반복문을 벗어남

memo.php 파일에서 $i = 1; 로 설정하고 $i++; 코드를 이용해 반복문을 만든다.
그리고 if($i>5) break; 코드로 표에 5개까지만 나타나도록 설정한다.

memo.php 테이블 전체 코드

<table border="1" width="800">
    <tr>
      **<th>No.</th>**
      <th>이름</th>
      <th>이메일</th>
      <th>내용</th>
      <th>저장일시</th>
    </tr>

    <?php
      $list = file("memo.txt");

      $a = array_reverse($list);

      **$i = 1;**

      foreach($a as $d) {
        **if($i>5) break;**
        $data = explode("///", $d)
    ?>

    <tr>
      **<td><?=$i?></td>**
      <td><?=$data[0]?></td>
      <td><?=$data[1]?></td>
      <td><?=$data[2]?></td>
      <td><?=$data[3]?></td>
    </tr>
  <?php
  $i++;
    }
  ?>
</table>

이와 같이 상위 다섯개만 표에 나타나게 된다.


최종 전체 코드

memo.php

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>메모장</title>
</head>
<body>
  <form action="memoSave.php">
    <div style="text-align: center;">
      <table border='1' align="center">
        <tr>
          <td>이름</td>
          <td style="text-align:left;"><input type="text" name="name"></td>
        </tr>
        <tr>
          <td>이메일</td>
          <td style="text-align:left;"><input type="text" name="email"></td>
        </tr>
        <tr>
          <td>내용</td>
          <td><input type="text" name="memo" style="width:400px;"></td>
        </tr>
      </table>
      <input type="submit" value="저장" style="margin-top: 10px;">
    </div>  
  </form>
<table border="1" width="800">
    <tr>
      <th>No.</th>
      <th>이름</th>
      <th>이메일</th>
      <th>내용</th>
      <th>저장일시</th>
    </tr>
    <?php
      $list = file("memo.txt");
      $a = array_reverse($list);
      $i = 1;
      foreach($a as $d) {
        if($i>5) break;
        $data = explode("///", $d)
    ?>
    <tr>
      <td><?=$i?></td>
      <td><?=$data[0]?></td>
      <td><?=$data[1]?></td>
      <td><?=$data[2]?></td>
      <td><?=$data[3]?></td>
    </tr>
  <?php
  $i++;
    }
  ?>
</table>
</body>
</html>

memoSave.php

<?php
  $fp = fopen("memo.txt", "a");
  $now = date("Y-m-d H:i:s");
  $content = $_REQUEST['name']."///".$_REQUEST['email']."///".$_REQUEST['memo']."///".$now."\r\n";
  echo $content;
  fwrite($fp, $content);
?>
<script>
  location.href="memo.php"
</script>

0개의 댓글