Web ページに avi ビデオを含めようとしています。ビデオは、セキュリティのために webroot フォルダーの外に保持され、PHP を使用して動的に読み込まれます (以下の完全なコードを参照)。
サンプルのフル パスは「/Users/me/project/1/video/test1.avi」です。
ページで奇妙なエラーが発生しています。次のステートメントを使用して、ファイルへのパスを作成します。
$pic = $CFG->dataroot."/".$COURT->id."/".$preview;
//($CFG->dataroot = '/Users/me/project')
//($COURT->id = 1 - a number representing the folder name.)
//($preview = 'video/test1.avi' - or the location of image/video)
これは画像に対しては機能しますが、ビデオ コントロールと「読み込み中...」のみを表示するビデオの読み込みに失敗します。
編集: $COURT->id をエコーしましたが、変数 1 が正しく渡されています
コードを変更し、 $COURT->id を削除してディレクトリを直接指定すると、ビデオと画像の両方で機能します。
$pic = $CFG->dataroot."/1/".$preview; //- works
なぜこれが考えられるのでしょうか?
前もって感謝します スティーブ
(Apache と Safari を使用して Mac でテストしています。)
完全なコード:
<?php
$preview = $_GET['preview'];
//works with images but not video
//$pic = $CFG->dataroot."/".$COURT->id."/".$preview;
//works but the folder '1' needs to dynamic i.e. var $COURT->id
$pic = $CFG->dataroot."/1/".$preview;
if ( isset($_GET['preview']) ) {
if (file_exists($pic) && is_readable($pic)) {
// get the filename extension
$ext = substr($pic, -3);
// set the MIME type
switch ($ext) {
case 'jpg':
$mime = 'image/jpeg';
break;
case 'gif':
$mime = 'image/gif';
break;
case 'png':
$mime = 'image/png';
break;
case 'avi':
$mime = 'video/avi'; //$mime = 'video/x-msvideo';
break;
case 'doc':
$mime = 'application/msword';
break;
case 'tif':
$mime = 'image/tiff';
break;
default:
$mime = false;
}
// if a valid MIME type exists, display the image
// by sending appropriate headers and streaming the file
if ($mime) {
header('Content-type: '.$mime);
header('Content-length: '.filesize($pic));
$file = @ fopen($pic, 'rb');
if ($file) {
fpassthru($file);
exit;
}
}
}
}