質問編集履歴
3
参考ソース元貼り直し
title
CHANGED
File without changes
|
body
CHANGED
@@ -116,4 +116,5 @@
|
|
116
116
|
|
117
117
|
|
118
118
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
119
|
-
他の方がネットに載せてくれていたソースを参考にしています。
|
119
|
+
他の方がネットに載せてくれていたソースを参考にしています。
|
120
|
+
http://qiita.com/mpyw/items/117ab6a88fd58d911c34
|
2
ご指摘があったのでコードを見やすくしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,10 +11,9 @@
|
|
11
11
|
また、通常の動画サイト(YouTube,ニコニコ動画など)はどのような仕組みでアップロードし、それを再生しているのでしょうか?
|
12
12
|
|
13
13
|
###該当のソースコード
|
14
|
+
|
15
|
+
最初に開くファイル:
|
14
16
|
```PHP
|
15
|
-
ここにご自身が実行したソースコードを書いてください
|
16
|
-
```
|
17
|
-
最初に開くファイル:
|
18
17
|
<html>
|
19
18
|
<head>
|
20
19
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
@@ -29,7 +28,9 @@
|
|
29
28
|
</body>
|
30
29
|
</html>
|
31
30
|
|
31
|
+
```
|
32
32
|
action.php:
|
33
|
+
```PHP
|
33
34
|
<?php
|
34
35
|
/* HTML特殊文字をエスケープする関数 */
|
35
36
|
function h($str) {
|
@@ -109,6 +110,7 @@
|
|
109
110
|
<html>
|
110
111
|
~~~~~~~
|
111
112
|
</html>
|
113
|
+
```
|
112
114
|
|
113
115
|
###試したこと
|
114
116
|
|
1
分かりにくかったので書き直しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,21 +13,103 @@
|
|
13
13
|
###該当のソースコード
|
14
14
|
```PHP
|
15
15
|
ここにご自身が実行したソースコードを書いてください
|
16
|
+
```
|
17
|
+
最初に開くファイル:
|
18
|
+
<html>
|
19
|
+
<head>
|
20
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
21
|
+
<title></title>
|
22
|
+
</head>
|
23
|
+
<body>
|
24
|
+
<form action="action.php" method="post" enctype="multipart/form-data" accept="video/*">
|
25
|
+
<label for="upfile">動画 </label>
|
26
|
+
<input type="file" name="upfile">
|
27
|
+
<input type="submit" value="アップロード">
|
28
|
+
</form>
|
29
|
+
</body>
|
30
|
+
</html>
|
31
|
+
|
32
|
+
action.php:
|
33
|
+
<?php
|
34
|
+
/* HTML特殊文字をエスケープする関数 */
|
35
|
+
function h($str) {
|
36
|
+
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
|
37
|
+
}
|
16
|
-
|
38
|
+
try {
|
39
|
+
|
40
|
+
// データベースに接続
|
41
|
+
$pdo = new PDO(
|
42
|
+
'mysql:host=;dbname=;charset=utf8',
|
43
|
+
'user',
|
44
|
+
'password',
|
45
|
+
[
|
46
|
+
PDO::ATTR_EMULATE_PREPARES => false,
|
47
|
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
48
|
+
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
49
|
+
]
|
50
|
+
);
|
51
|
+
|
52
|
+
/* アップロードがあったとき */
|
53
|
+
if (isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error'])) {
|
54
|
+
|
55
|
+
// バッファリングを開始
|
56
|
+
ob_start();
|
57
|
+
|
58
|
+
try {
|
17
59
|
switch ($_FILES['upfile']['error']) {
|
18
60
|
case UPLOAD_ERR_OK: // OK
|
19
61
|
break;
|
20
|
-
case UPLOAD_ERR_NO_FILE: //未選択
|
62
|
+
case UPLOAD_ERR_NO_FILE: // 未選択
|
21
63
|
throw new RuntimeException('ファイルが選択されていません', 400);
|
22
64
|
case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過
|
23
|
-
throw new RuntimeException('ファイルサイズが大き
|
65
|
+
throw new RuntimeException('ファイルサイズが大きすぎます', 400);
|
24
66
|
default:
|
25
|
-
throw new RuntimeException('その他エラー', 500);
|
67
|
+
throw new RuntimeException('その他のエラーが発生しました', 500);
|
26
68
|
}
|
27
|
-
if (!$info = @**
|
69
|
+
if (!$info = @__**getimagesize**__($_FILES['upfile']['tmp_name'])) {
|
28
70
|
throw new RuntimeException('有効なファイルを指定してください', 400);
|
29
71
|
}
|
30
72
|
|
73
|
+
|
74
|
+
// INSERT処理
|
75
|
+
$stmt = $pdo->prepare('INSERT INTO ????(id,name,raw_data) VALUES(?,?,?)');
|
76
|
+
$stmt->execute([
|
77
|
+
$_FILES['upfile']['name'],
|
78
|
+
$info[2],
|
79
|
+
file_get_contents($_FILES['upfile']['tmp_name']),
|
80
|
+
ob_get_clean(), // バッファからデータを取得してクリア
|
81
|
+
(new DateTime('now', new DateTimeZone('Asia/Tokyo')))->format('Y-m-d H:i:s'),
|
82
|
+
]);
|
83
|
+
|
84
|
+
$msgs[] = ['green', 'ファイルは正常にアップロードされました'];
|
85
|
+
|
86
|
+
} catch (RuntimeException $e) {
|
87
|
+
|
88
|
+
while (ob_get_level()) {
|
89
|
+
ob_end_clean(); // バッファをクリア
|
90
|
+
}
|
91
|
+
http_response_code($e instanceof PDOException ? 500 : $e->getCode());
|
92
|
+
$msgs[] = ['red', $e->getMessage()];
|
93
|
+
|
94
|
+
}
|
95
|
+
|
96
|
+
|
97
|
+
}
|
98
|
+
|
99
|
+
$rows = $pdo->query('SELECT id,name FROM douga')->fetchAll();
|
100
|
+
|
101
|
+
} catch (PDOException $e) {
|
102
|
+
|
103
|
+
http_response_code(500);
|
104
|
+
$msgs[] = ['red', $e->getMessage()];
|
105
|
+
|
106
|
+
}
|
107
|
+
|
108
|
+
?>
|
109
|
+
<html>
|
110
|
+
~~~~~~~
|
111
|
+
</html>
|
112
|
+
|
31
113
|
###試したこと
|
32
114
|
|
33
115
|
|