>我正在尝试在网页中包含 avi 视频。为了安全起见,视频保存在webroot文件夹之外,并使用PHP动态加载(请参阅下面的完整代码)。
示例完整路径是"/用户/我/项目/1/视频/测试1.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;
}
}
}
}
显然,当图像作为$preview发送时(在预览链接所在的页面上),courtid 会动态发送到下一页,并且它很好。
但是当视频作为$preview发送时 - courtid 它不是 se(n)t。
为什么不呢,我们无法在这些代码中看到,而是在触发此(播放)功能的代码之前的代码。
尝试在应该播放视频的页面上回显 courtid,以查看它是否设置为 1,仅此而已。
我根本找不到任何其他合乎逻辑的解决方案。