0

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;
        }
    }
}

}

4

1 に答える 1

0

明らかに、画像が $preview (プレビューへのリンクがあるページの前のページ) として送信されると、courtid は次のページに動的に送信され、それで問題ありません。

しかし、ビデオが $preview として送信された場合 - courtid は se(n)t ではありません。

なぜでしょうか、これらのコードでは見ることができませんが、この (再生) 機能をトリガーするコードの前にコードがあります。

ビデオを再生するページで courtid をエコーし​​て、1 に設定されているかどうかを確認してください。

他の論理的な解決策を見つけることができません。

于 2013-09-05T23:52:46.923 に答える