回答編集履歴
4
加筆修正
answer
CHANGED
@@ -34,8 +34,13 @@
|
|
34
34
|
|
35
35
|
削除処理foreachループにて、
|
36
36
|
投稿番号が指定の番号と違ったらファイルに書き出す、のもいいですが、
|
37
|
+
元のデータファイルを残したまま「追記モード」で書き出すと、
|
38
|
+
それだけでデータのダブリを生みますね。
|
39
|
+
読みだした直後にファイルを削除するのが妥当でしょう。
|
40
|
+
あるいは、
|
37
41
|
例えば書き出すのを後回しにして、書き出し用配列を用意して、
|
38
|
-
書き出す配列をもとに改行コードで連結してから書き
|
42
|
+
書き出す配列をもとに改行コードで連結してから上書きで書き出す、
|
43
|
+
という技でもできそうです。
|
39
44
|
|
40
45
|
---
|
41
46
|
|
@@ -48,4 +53,8 @@
|
|
48
53
|
flock()にて排他ロックを行い、
|
49
54
|
ロック中は待ち合わせするような工夫も必要です。
|
50
55
|
簡易掲示板だからそこまで求めないと考えるのか、
|
51
|
-
簡易掲示板だけどしっかり作り込むかは考え方次第です。
|
56
|
+
簡易掲示板だけどしっかり作り込むかは考え方次第です。
|
57
|
+
Aさんが削除のアクションを、Bさんが投稿のアクションを同じタイミングで起こしたとき、
|
58
|
+
削除処理でファイルを削除したところで投稿の処理が走ると、
|
59
|
+
データが消えるか、投稿が無視されるか、
|
60
|
+
毎度実行しても結果がバラバラな動作になりかねません。
|
3
加筆修正
answer
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
例えば5番まで使っている時に3番を削除したら、
|
17
17
|
本来1,2,4,5の行がある状態になりますよね。
|
18
18
|
でもこのとき$countは行数4に対して1を加えて5にしてしまうと、
|
19
|
-
投稿番号がダブることになります。
|
19
|
+
投稿番号5番がダブることになります。
|
20
20
|
なので、投稿データの順序が入れ替わることがないのであれば、
|
21
21
|
必ず最後の行の投稿番号が最大値になるはずなので、
|
22
|
-
「最後の
|
22
|
+
「最後の行の投稿番号+1」を使うのも手ですし、
|
23
23
|
あるいは、
|
24
24
|
別途投稿番号発番用データファイルを用意して、
|
25
25
|
投稿番号を払い出したら+1して保存するなどすればよいです。
|
@@ -35,4 +35,17 @@
|
|
35
35
|
削除処理foreachループにて、
|
36
36
|
投稿番号が指定の番号と違ったらファイルに書き出す、のもいいですが、
|
37
37
|
例えば書き出すのを後回しにして、書き出し用配列を用意して、
|
38
|
-
書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。
|
38
|
+
書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。
|
39
|
+
|
40
|
+
---
|
41
|
+
|
42
|
+
web上のシステムなので、実際に複数の人が使い始めると、
|
43
|
+
ほぼ同じタイミングで投稿されることも起こりえます。
|
44
|
+
file()やfile_get_contents()やfile_put_contents()などの簡易ファイルアクセス関数は
|
45
|
+
ファイルの排他ロックがかからないため、
|
46
|
+
タイミングによってはデータファイル破損を招きます。
|
47
|
+
ファイルでやりきるならfopen()~fgets()~fputs()~fclose()といっしょに
|
48
|
+
flock()にて排他ロックを行い、
|
49
|
+
ロック中は待ち合わせするような工夫も必要です。
|
50
|
+
簡易掲示板だからそこまで求めないと考えるのか、
|
51
|
+
簡易掲示板だけどしっかり作り込むかは考え方次第です。
|
2
加筆修正
answer
CHANGED
@@ -4,6 +4,12 @@
|
|
4
4
|
htmlspecialchars()加工前の文字列で扱い、
|
5
5
|
htmlとして出力する場合に直前にhtmlspecialchars()で臨時に加工するのがセオリーです。
|
6
6
|
|
7
|
+
但し、今回のデータファイル上で、データの区切りに「<>」を使っているため、
|
8
|
+
もしも投稿POSTデータに「<>」が含まれていたらどうするか、
|
9
|
+
拒否するのか、
|
10
|
+
含まれていても差し支えないように置き換えるか、
|
11
|
+
の工夫は絶対必要です。
|
12
|
+
|
7
13
|
---
|
8
14
|
|
9
15
|
投稿番号を管理する上で、`$count`を使用していますが、
|
@@ -15,5 +21,18 @@
|
|
15
21
|
必ず最後の行の投稿番号が最大値になるはずなので、
|
16
22
|
「最後の今日の投稿番号+1」を使うのも手ですし、
|
17
23
|
あるいは、
|
18
|
-
別途投稿番号発番用ファイルを用意して、
|
24
|
+
別途投稿番号発番用データファイルを用意して、
|
19
|
-
投稿番号を払い出したら+1して保存するなどすればよいです。
|
25
|
+
投稿番号を払い出したら+1して保存するなどすればよいです。
|
26
|
+
|
27
|
+
---
|
28
|
+
|
29
|
+
やっと削除部分の処理の評価ですが、
|
30
|
+
変数名がわかりにくすぎます。
|
31
|
+
変数名を見て、それがなんの目的のものなのかがピンとこないものは
|
32
|
+
見直すべきです。
|
33
|
+
$valueと$value4って何がどう違うのか、パット見で把握できないでしょ。
|
34
|
+
|
35
|
+
削除処理foreachループにて、
|
36
|
+
投稿番号が指定の番号と違ったらファイルに書き出す、のもいいですが、
|
37
|
+
例えば書き出すのを後回しにして、書き出し用配列を用意して、
|
38
|
+
書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。
|
1
加筆修正
answer
CHANGED
@@ -2,4 +2,18 @@
|
|
2
2
|
[「何故htmlspecialcharsを通すのか?」を一言でどうぞ - Qiita](https://qiita.com/mpyw/items/19e6fed835ccdbcb0d6d)
|
3
3
|
データとして保持する文字列(ファイルに書き出す文字列)は
|
4
4
|
htmlspecialchars()加工前の文字列で扱い、
|
5
|
-
htmlとして出力する場合に直前にhtmlspecialchars()で臨時に加工するのがセオリーです。
|
5
|
+
htmlとして出力する場合に直前にhtmlspecialchars()で臨時に加工するのがセオリーです。
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
投稿番号を管理する上で、`$count`を使用していますが、
|
10
|
+
例えば5番まで使っている時に3番を削除したら、
|
11
|
+
本来1,2,4,5の行がある状態になりますよね。
|
12
|
+
でもこのとき$countは行数4に対して1を加えて5にしてしまうと、
|
13
|
+
投稿番号がダブることになります。
|
14
|
+
なので、投稿データの順序が入れ替わることがないのであれば、
|
15
|
+
必ず最後の行の投稿番号が最大値になるはずなので、
|
16
|
+
「最後の今日の投稿番号+1」を使うのも手ですし、
|
17
|
+
あるいは、
|
18
|
+
別途投稿番号発番用ファイルを用意して、
|
19
|
+
投稿番号を払い出したら+1して保存するなどすればよいです。
|