teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

参考ソース元貼り直し

2016/11/29 04:58

投稿

reptiles_0206
reptiles_0206

スコア8

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

ご指摘があったのでコードを見やすくしました。

2016/11/29 04:58

投稿

reptiles_0206
reptiles_0206

スコア8

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

分かりにくかったので書き直しました。

2016/11/29 00:42

投稿

reptiles_0206
reptiles_0206

スコア8

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
- ```try {
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('ファイルサイズが大きいです', 400);
65
+ throw new RuntimeException('ファイルサイズが大きすぎます', 400);
24
66
  default:
25
- throw new RuntimeException('その他エラー', 500);
67
+ throw new RuntimeException('その他エラーが発生しました', 500);
26
68
  }
27
- if (!$info = @**__getimagesize__**($_FILES['upfile']['tmp_name'])) {
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