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