我正在使用以下代码在本地主机上流电影。小于2GB的电影可以正常工作,但是对于大于2GB的电影,则无法播放。
请帮助我阅读较大的文件该怎么做。
这是我用于流电影的代码
<?php
//Determine file path according to extension
if (!isset($_GET['ext']) || $_GET['ext'] == 'mp4') {
$path ='movies/'.$_GET['movie'];
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($path);
header('Content-Type: ' . $mime);
$size = filesize($path);
if (isset($_SERVER['HTTP_RANGE'])) {
list($specifier, $value) = explode('=', $_SERVER['HTTP_RANGE']);
if ($specifier != 'bytes') {
header('HTTP/1.1 400 Bad Request');
return;
}
list($from, $to) = explode('-', $value);
if (!$to) {
$to = $size - 1;
}
$fp = fopen($path, 'rb');
if (!$fp) {
header('HTTP/1.1 500 Internal Server Error');
return;
}
header('HTTP/1.1 206 Partial Content');
header('Accept-Ranges: bytes');
header('Content-Length: ' . ($to - $from));
header("Content-Range: bytes {$from}-{$to}/{$size}");
fseek($fp, $from);
while(true){
if(ftell($fp) >= $to){
break;
}
echo fread($fp, 8192);
// Flush do buffer
ob_flush();
flush();
}
}
else {
header('Content-Length: ' . $size);
readfile($path);
}
我已经使用xammpp作为服务器将文件托管在本地主机上。
答案 0 :(得分:-1)
这可能有不同的原因。
fopen()将文件读入RAM。因此限制似乎来自那里。
首先,请确保您的系统中至少安装了4GB。 如果还需要更多,请确保不要使用Win 32位系统,因为该系统仅支持最高4GB的内存。
然后,您可以尝试增加PHP的memory_limit
。打开xampp / php / php.ini文件,将memory_limit
更改为您需要的值,或者像这样直接在您的php文件中设置ini值
ini_set(”memory_limit”,”16M”);
希望这会有所帮助。对于更具体的答案,如果您有任何错误消息,将很有帮助。