这些是我的设置:
Web Server: Apache/2.4.25
Web structure:
/
|__Video/
|__ test.mp4
|__play.php
当前,我将所有视频公开到服务器上,直接将视频目录放置在apache目录中。
我想要获得的是将视频移至Apache目录之外(假设没有权限问题),并通过GET请求仅将请求的视频传输到play.php
,例如:GET play.php?req=test.mp4
当前,我编写了以下代码:
$name = $_GET['req']
header('Accept-Ranges: bytes');
header('Content-Length: ' . filesize($name));
header('Content-Type: ' . mime_content_type($name));
header('Content-Disposition: filename="'.$name.'"');
readfile($name);
exit;
缺少什么?尝试使用play.php访问文件时,为什么会显示“不支持视频媒体”?使用“ mysite.com/Video/test.mp4”,我可以直接访问媒体而不会出现问题。
我意识到,如果等待足够长的时间,浏览器将完全下载该文件并进行复制。我无法获得的是文件流。
答案 0 :(得分:0)
我已经找到了问题和可能的解决方案。
X-SendFile
模块。 如果您使用像我这样的Debian足以:
sudo apt-get install libapache2-mod-xsendfile
/ect/apache2/sites-available
),在开头(或到所选的VirtualHost)添加以下行:XSendFile on
XSendFilePath /full/path/to/directory1
XSendFilePath /full/path/to/directory2
sudo systemctl reload apache2 && sudo systemctl restart apache2
$name = "/full/path/to/directory1/".$_GET['req']
header('Accept-Ranges: bytes');
header('Content-Length: ' . filesize($name));
header('Content-Type: ' . mime_content_type($name));
header('Content-Disposition: filename="'.$name.'"');
header('X-Sendfile: $name');
有关更多信息,建议您访问this page。