回答編集履歴

1

追記

2016/11/30 09:19

投稿

退会済みユーザー
test CHANGED
@@ -3,3 +3,111 @@
3
3
 
4
4
 
5
5
  onclick というのは JavaScript ですよね。外部からファイル名を指定して、PHPに処理を渡すのはセキュリティ的にご法度です。そんな実装をしたら、任意のファイルを抜き出すことができてしまいます。
6
+
7
+
8
+
9
+ #サンプル
10
+
11
+
12
+
13
+ ```php
14
+
15
+ <!DOCTYPE HTML>
16
+
17
+ <html lang="ja">
18
+
19
+ <head>
20
+
21
+ <meta charset="UTF-8">
22
+
23
+ <title></title>
24
+
25
+ </head>
26
+
27
+ <body>
28
+
29
+ <a href="download.php?id=1">ダウンロード</a>
30
+
31
+ </body>
32
+
33
+ </html>
34
+
35
+ ```
36
+
37
+
38
+
39
+ ```php
40
+
41
+ <?php
42
+
43
+
44
+
45
+ /**
46
+
47
+ * download.php
48
+
49
+ */
50
+
51
+
52
+
53
+ /**
54
+
55
+ * ファイルのパスを取得する
56
+
57
+ * @param type $id
58
+
59
+ * @return string
60
+
61
+ */
62
+
63
+ function getFilePath($id)
64
+
65
+ {
66
+
67
+ // あらかじめファイルは作成しておく
68
+
69
+ $arr = array(
70
+
71
+ 1 => 'data/list.txt'
72
+
73
+ , 2 => 'data/data.txt'
74
+
75
+ );
76
+
77
+
78
+
79
+ return $arr[$id];
80
+
81
+ }
82
+
83
+
84
+
85
+ if (NULL == filter_input(INPUT_GET, 'id')) {
86
+
87
+ echo 'パラメータが不正です。';
88
+
89
+ exit();
90
+
91
+ }
92
+
93
+
94
+
95
+ $id = filter_input(INPUT_GET, 'id');
96
+
97
+
98
+
99
+ $path = getFilePath($id);
100
+
101
+
102
+
103
+ $filename = basename($path);
104
+
105
+ header('Content-Type: application/octet-stream');
106
+
107
+ header(sprintf('Content-Disposition: attachment;filename="%s"', $filename));
108
+
109
+ readfile($path);
110
+
111
+ exit;
112
+
113
+ ```