回答編集履歴

2

追記

2019/05/11 05:52

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -9,3 +9,75 @@
9
9
 
10
10
 
11
11
  ※0KBファイルってそれはそれで危険なので弾いても良いと思います。
12
+
13
+
14
+
15
+
16
+
17
+ 追加質問があるようなので追記。
18
+
19
+
20
+
21
+ ----------
22
+
23
+
24
+
25
+ > ファイルがサーバーに保存されるのもこのタイミングではなく、次のページにしたい
26
+
27
+
28
+
29
+ ファイルの実体はinput type=fileがform送信された時点でテンポラリファイルとして既に送信されています。なので「確認画面から送信完了画面にいくときに保存」ということは基本的にできません。
30
+
31
+ 1つのやり方としては「一時ディレクトリ」と「本番ディレクトリ」で分けるやり方です。
32
+
33
+
34
+
35
+ > move_uploaded_file()を記述するタイミングが誤っているのでしょうか。
36
+
37
+
38
+
39
+ move_uploaded_file()にこだわる開発者が多いのは仕方がないことではありますが、、
40
+
41
+ 上記のとおりmove_uploaded_file()を実行しなくてもテンポラリファイルアップロードはフォームのSUBMIT時点で行われているので
42
+
43
+ move_uploaded_file()がやっていることって実質ファイルのリネームです。
44
+
45
+ 私が提示したmpywさんの記事に[move_uploaded_file じゃなくて rename じゃだめ?](https://qiita.com/mpyw/items/939964377766a54d4682#move_uploaded_file-%E3%81%98%E3%82%83%E3%81%AA%E3%81%8F%E3%81%A6-rename-%E3%81%98%E3%82%83%E3%81%A0%E3%82%81)というのがあります。
46
+
47
+
48
+
49
+ そもそも[PHPマニュアル](https://www.php.net/manual/ja/function.move-uploaded-file.php)にあるように** アップロードされたファイルを新しい位置に移動する**のがmove_uploaded_file()です。
50
+
51
+ 「アップロードを行う関数」ではありません。関数をよく読んでみましょう。
52
+
53
+ `move uploaded file`ですからね。ファイルのアップロード自体はこの関数関係ないです。アップロードされたファイルをどう扱うか。なので。
54
+
55
+
56
+
57
+ ということで、テンポラリファイルに対してバリデーションを行って弾いて再入力を促すようにすること(入力画面再描画が望ましい)、
58
+
59
+ バリデーションOKのファイルであればファイルを一時フォルダに移動し、確認画面を表示
60
+
61
+ →送信ボタンを押下で本番用フォルダに移動
62
+
63
+ という流れです。
64
+
65
+
66
+
67
+ ちなみに確認画面でキャンセルとか画面閉じたりしたら一時フォルダにゴミがたまっていくので、
68
+
69
+ 一時フォルダに保存する際はセッションで一意な名前のファイル名をつけておくとかして、利用者と紐づくようにしておき、削除するような仕組みが必要になります。
70
+
71
+ 日時バッチ用意して全削除でも良いですけどそのときに誰も確認画面で送信しようとしてないという保証はないのでやはり紐づけは必要。でもやっぱり定期にクロールして削除する仕組みは必要。
72
+
73
+ 間違ってもtmp_nameをhiddenに置いておくなんてことをしてはいけません。テンポラリなので(そこは調べてください)
74
+
75
+ もちろんnameをそのまま保存するのもいけません。([参考](https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/402.html))
76
+
77
+
78
+
79
+
80
+
81
+ というか、そもそも提示のコードって私が提示したmpywさんの記事ほぼそのままなので、それぞれがどういう意図で組まれているのかを理解するのが先のように思います。
82
+
83
+ 自身のやりたいことや既にあるコードにそのまま埋め込むのはおそらく無理です。全ての機能を採用するかどうかも検討が必要ですし、いったん自身のコードから離れて記事のコードをミニマムコードに採用して使ってみて挙動確認や調整をしてからでないと使いこなせないと思います。

1

修正

2019/05/11 05:52

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -5,3 +5,7 @@
5
5
  - [ファイルアップロードの例外処理はこれぐらいしないと気が済まない](https://qiita.com/mpyw/items/939964377766a54d4682)
6
6
 
7
7
  の[#アップロード例外処理サンプル](https://qiita.com/mpyw/items/939964377766a54d4682#%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB)を参照
8
+
9
+
10
+
11
+ ※0KBファイルってそれはそれで危険なので弾いても良いと思います。