서기의 PHP7 강의를 토대로 정리하였습니다!
fopen(”파일명”, “모드”); → 파일을 해당 모드로 생성
- r : 읽기(read)
- w : 쓰기(write)
- a: 추가하기(append)
fopen 함수를 쓸 때 리눅스나 맥 환경에서 Permission denied 오류가 나는 경우가 있다. 그땐 터미널을 통해 다음 코드를 실행해보면 된다.
sudo chmod -R 777 (디렉토리)
ex) sudo chmod -R 777 /Applications/XAMPP/xamppfiles/htdocs
fwrite(변수, “추가할 텍스트”); → 변수에 할당된 파일에 텍스트 쓰기
fclose(변수); → 변수에 할당된 파일 닫기
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 함수는 현재 날짜를 출력해준다.
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>