回答編集履歴
1
一部コードが抜けていたのを修正
answer
CHANGED
@@ -9,31 +9,76 @@
|
|
9
9
|
|
10
10
|
新規投稿を書き込むときは`fseek()`カーソル(ファイルポインタ)の位置によらず、常に一番最後に追記されます。
|
11
11
|
|
12
|
+
HTMLの意味が違うかもしれませんが、下記PHPファイルを`sample.php`として保存してから実行すればそのまま同じディレクトリに`kadai.txt`が保存されるようになっています。
|
13
|
+
|
14
|
+
**※セキュリティなどは一切考慮していないのでこのままコピーして何かの本番業務に使用するのは危険です。**
|
15
|
+
|
12
16
|
```php
|
17
|
+
<html>
|
18
|
+
<head>
|
19
|
+
<title>sample</title>
|
20
|
+
</head>
|
21
|
+
<body>
|
22
|
+
<form action="./sample.php" method="post">
|
13
|
-
|
23
|
+
<table border="1">
|
14
|
-
$comment = $_POST["comment"];
|
15
|
-
$postedAt = date('Y-m-d H:i:s');
|
16
|
-
|
24
|
+
<tr>
|
25
|
+
<td>名前</td><td><input type="text" name="name" value="<?php echo isset($_POST['name']) ? $_POST["name"] : ''; ?>"></td>
|
26
|
+
</tr>
|
27
|
+
<tr>
|
28
|
+
<td>コメント</td><td><input type="text" name="comment" value="<?php echo isset($_POST["comment"]) ? $_POST["comment"] : ''; ?>"></td>
|
29
|
+
</tr>
|
30
|
+
</table>
|
31
|
+
<br>
|
32
|
+
<input type="submit" name="create" value="新規投稿">
|
33
|
+
</form>
|
34
|
+
</body>
|
35
|
+
</html>
|
17
36
|
|
37
|
+
<?php
|
18
38
|
//投稿管理ファイル
|
19
39
|
$filename = 'kadai.txt';
|
20
40
|
$fp = fopen($filename, 'a+');
|
21
41
|
|
42
|
+
//投稿時間
|
43
|
+
$postedAt = date('Y-m-d H:i:s');
|
22
|
-
//
|
44
|
+
//投稿番号
|
23
|
-
fseek($fp, -1, SEEK_END);
|
24
|
-
$
|
45
|
+
$count = 1;
|
25
46
|
|
26
|
-
|
47
|
+
//新規投稿
|
27
|
-
$end = str_replace(['{','}'], ['',''], $end);
|
28
|
-
$end = explode("\t<>\t", $end);
|
29
|
-
|
48
|
+
if (isset($_POST['create'])) {
|
30
|
-
|
49
|
+
if (empty($_POST['name']) || empty($_POST["comment"])) {
|
50
|
+
exit();
|
31
51
|
}
|
32
|
-
}
|
33
52
|
|
34
|
-
|
53
|
+
$name = $_POST["name"];
|
35
|
-
$
|
54
|
+
$comment = $_POST["comment"];
|
36
55
|
|
56
|
+
//最終行にカーソル(ファイルポインタ)移動
|
57
|
+
$offset = -2;
|
58
|
+
while (fgetc($fp) !== "\n") {
|
59
|
+
fseek($fp, $offset--, SEEK_END);
|
60
|
+
}
|
61
|
+
//下記でも同じ(最終行にカーソル(ファイルポインタ)移動)
|
62
|
+
//for ($offset=-2, fseek($fp, $offset, SEEK_END); fgetc($fp) !== "\n"; $offset--) {
|
63
|
+
// fseek($fp, $offset, SEEK_END);
|
64
|
+
//}
|
65
|
+
|
66
|
+
//最終行取得
|
67
|
+
$end = fgets($fp);
|
68
|
+
|
69
|
+
if (! empty($end)) {
|
70
|
+
$end = str_replace(['{','}'], ['',''], $end);
|
71
|
+
$end = explode("\t<>\t", $end);
|
72
|
+
if (count($end) > 0) {
|
73
|
+
$count = intval($end[0]) + 1; //最新の投稿番号
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
//新規投稿保存フォーマット
|
78
|
+
$newData = "{".$count."}"."\t<>\t". "{".$name."}"."\t<>\t"."{".$comment."}"."\t<>\t"."{".$postedAt."}"."\n";
|
79
|
+
|
37
|
-
fwrite($fp, $newData);
|
80
|
+
fwrite($fp, $newData);
|
38
|
-
fclose($fp);
|
81
|
+
fclose($fp);
|
82
|
+
}
|
83
|
+
?>
|
39
|
-
```
|
84
|
+
```
|