用PHP从本地提取视频并向浏览器输出的方法

有时,在一些特殊场景中,我们需要访问视频时,需要预先通过PHP做一些校验,校验通过后,才允许将视频数据输出给浏览器。

下面这段代码实现了用PHP从本地提取视频文件,并通过header函数以字节的方式向浏览器输出视频数据流。

<?php

//需要下载的文件
$file_name = 'test.mp4';

//下载文件必须先要将文件打开,写入内存
$fp = fopen($file_name, 'r+');

//判断文件是否存在
if (!file_exists($file_name)) {
    echo "文件不存在";
    exit();
}

//判断文件大小
$file_size = filesize($file_name);

//返回的文件
header('Content-type: application/octet-stream');

//按照字节格式返回
header('Accept-Ranges: bytes');

//返回文件大小
header('Accept-Length: ' . $file_size);

//弹出客户端对话框,对应的文件名
header('Content-Disposition: attachment; filename=' . $file_name);

//防止服务器瞬时压力增大,分段读取
$buffer = 4096;

while(!feof($fp)) {
    $file_data = fread($fp, $buffer);
    echo $file_data;
}

//关闭文件
fclose($fp);

?>