PHP - 从动态目录路径播放视频 - 奇怪的错误

时间:2013-09-05 21:39:12

标签: php video directory mime-types fopen

我试图在网页中加入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;
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

显然,当图像作为$ preview发送时(在预览链接之前的页面上),courtid会动态发送到下一页,并且OK。

但是当视频以$ preview的形式发送时,它就不是se(n)t。

为什么不,我们在这些代码中看不到,而是之前的代码,是触发此(播放)功能的代码。

尝试在播放视频的页面上回显courtid以查看它是否设置为1并且就是这样。

我根本找不到任何其他逻辑解决方案。