使用php的流式视频/mp4
我在通过php传输mp4文件时遇到问题。 下载文件的时间为1MB。你可以在这里看到: 我尝试了很多标题,读了很多线程,但是很多都没有解决或者没有帮助我,比如这个:。需要帮忙吗 这是我的代码:使用php的流式视频/mp4,php,video,stream,mp4,Php,Video,Stream,Mp4,我在通过php传输mp4文件时遇到问题。 下载文件的时间为1MB。你可以在这里看到: 我尝试了很多标题,读了很多线程,但是很多都没有解决或者没有帮助我,比如这个:。需要帮忙吗 这是我的代码: <? $root=getenv("DOCUMENT_ROOT"); $file = "$root/".$_GET['get']; header("Content-Type: video/mp4"); //header("Content-Type: application/octet-stream");
<?
$root=getenv("DOCUMENT_ROOT");
$file = "$root/".$_GET['get'];
header("Content-Type: video/mp4");
//header("Content-Type: application/octet-stream"); // downloads the file
$start=0;
$size = filesize($file);
$length = $size;
$end = $size - 1;
//header('HTTP/1.1 206 Partial Content');
header("Accept-Ranges: $start-$end");
header("Content-Range: bytes $start-$end/$size");
header("Content-Length: $length");
$data = fopen("$file", "r");
fseek($data, $start);
$bytesleft = $size-$start + 1;
$buffer = 1024 * 256; // 256kb
while(!feof($data)){
if($bytesleft > $buffer){
echo fread($data, $buffer);
flush();
}else{
echo fread($data, $bytesleft);
flush();
}
//sleep(1); // Speedlimit = one buffer per second
}
fclose($data);
exit;
?>
提前谢谢不用客气。我从服务器下载了该文件,并将其与服务器上以十六进制存储的原始文件进行了比较。
下载的版本在开始时多了一个字节:0A,这就是问题所在。现在一切正常。此代码非常危险。考虑<代码>示例.com?代码。php?id =….. /…/…/….. /…/ETC/PASSWD < /代码>。你允许用户在你的服务器上抓取任何文件。啊,我明白了。好的,谢谢,等我把这个弄到手后,我再做保安。有什么想法吗,怎么了?我看不出有什么“错误”。大量的cargo cult编程符号,我不知道你为什么要为这个大的
bytesleft>缓冲区而烦恼-fread不能超过文件的结尾,而且你永远不会更新$bytesleft
。好吧,我会删除$bytesleft等。但是代码不会从PHP手册页面复制:)flush()可能无法覆盖web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着您必须调用ob_flush()和flush()来刷新ob输出缓冲区(如果您正在使用这些缓冲区)。-另外,检查以确保没有遇到任何脚本超时。另外,$start-$end是负数,如果只有一个块,那么就没有必要设置内容“范围”。总的来说,在尝试这一点之前,要做更多的研究。