動画データをデータベースにアップロードし、それをサイトで閲覧しようと思います。
より具体的に申し上げると、
1.マスター管理画面(クライアント様が使う画面、IDとパスワードで入ります)内で、まず動画A、動画B、動画C・・・・・と、動画データをアップしていく
2.マスター管理画面で次に「ユーザーaさんには動画A、ユーザーbさんには動画B、ユーザーcさんには動画Aと動画Bを見れるようにしよう」などと設定します。
3.各ユーザーにはユーザー用のIDとパスワードでログインできる画面を用意し、ログイン後それぞれに割り振られた動画のみを見ることができます。
さて、データベースにはこのように格納しています。
これを取り出すphpの記述は下記です。
php
1<?php 2 //DBから取得して表示する. 3 $sql = "SELECT (以下省略) 4 $stmt = $pdo->prepare($sql); 5 $stmt -> execute(); 6 while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)){ 7 echo "<tr>"; 8 echo "\n"; 9 echo '<td>タイトル:'; 10 echo $row["mediaTitle"]; 11 echo '<br>'; 12 //動画と画像で場合分け 13 $target = $row["fname"]; 14 if($row["extension"] == "mp4"){ 15 echo ("<video src=\"import_media.php?target=$target\" width=\"426\" height=\"240\" controls></video>"); 16 } 17 elseif($row["extension"] == "jpeg" || $row["extension"] == "png" || $row["extension"] == "gif"){ 18 echo ("<img src='import_media.php?target=$target'>"); 19 } 20 echo '<p class="red bold">ワンポイントアドバイス!</p>'; 21 echo nl2br(htmlspecialchars($row["yComment"], ENT_QUOTES, 'UTF-8')); 22 echo "</td>"; 23 echo "</tr>"; 24 echo "\n"; 25 } 26 ?>
さて、こうしたときに
「PCのsafari以外のブラウザ(firefox、chrome)では再生できる」が、
「PCのsafariそしてiPhoneでは(safariでもchromeでもfirefoxでも)再生できません」。
(safari以外の)PCでは問題なく再生できているので、基本的な記述は正しい、そしてDBとの接続では誤っていないと考えているのですが、なぜiphoneでは再生できないのか分からず、困っております。
そこでお尋ねしたいのは、
1.このPHPの記述をどう直せばiPhoneで再生できるようになるのか
2.(もしかして)このアップロードのしかたそのものがiPhoneでは見られないやり方なのか。そうだとすればどのような手法を取れば良いのか
ということでございます。
皆様、どうぞよろしくお願い致します。
追記1
import_media.phpの記述を提示、いただきましたので、以下に追記させていただきます。
よろしくお願い致します。
php
1<?php 2 /*db情報*/ 3 include_once '../../management/core/config.php'; 4 5 if(isset($_GET["target"]) && $_GET["target"] !== ""){ 6 $target = $_GET["target"]; 7 } 8 else{ 9 header("Location: index.php"); 10 } 11 $MIMETypes = array( 12 'png' => 'image/png', 13 'jpeg' => 'image/jpeg', 14 'gif' => 'image/gif', 15 'mp4' => 'video/mp4' 16 ); 17 try { 18 $pdo = new PDO($dsn, $username, $password); 19 $sql = "SELECT * FROM mediaList WHERE fname = :target;"; 20 $stmt = $pdo->prepare($sql); 21 $stmt -> bindValue(":target", $target, PDO::PARAM_STR); 22 $stmt -> execute(); 23 $row = $stmt -> fetch(PDO::FETCH_ASSOC); 24 header("Content-Type: ".$MIMETypes[$row["extension"]]); 25 echo ($row["raw_data"]); 26 } 27 catch (PDOException $e) { 28 echo("<p>500 Inertnal Server Error</p>"); 29 exit($e->getMessage()); 30 } 31?>
追記2
「controls」→「playsinline」に変更したところ、黒塗り三角斜線の画像も出ず、該当箇所は白く表示されました。
追記3
aachyee様の助言に従い、Content-Typeヘッダーを調べてみましたので以下に掲載いたします。
いかがでしょうか。どうぞよろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー