php - 无法读取大于 2GB 的文件
问题描述
我正在使用下面的代码在我的本地主机上流式传输电影。小于 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 作为服务器将文件托管在 localhost 上。
解决方案
这可能有不同的原因。
fopen() 将文件读入您的 RAM。所以限制似乎来自那里。
首先,确保您的系统中安装了至少 4GB。如果您需要更多,请确保您不使用 Win 32 位系统,因为它最多仅支持 4GB 内存。
然后你可以尝试增加memory_limit
PHP的。打开 xampp/php/php.ini 文件并将其更改为memory_limit
您需要的或直接在您的 php 文件中设置 ini 值,如下所示
ini_set(”memory_limit”,”16M”);
希望这可以帮助。对于更具体的答案,如果您有任何错误消息会很有帮助。
推荐阅读
- perl - 针对 xml 响应的 JMeter 响应断言验证失败
- ios - 屏蔽层和添加子层iOS之间的区别
- docker - 无法删除 docker 容器并且所有图像都已删除
- php - 使用策略限制操作
- android - Webrtc Firefox Android Safari iOS 流错误
- java - 从 Drools 规则调用 java 方法
- powershell - 在 Powershell 中创建动态哈希表
- kubernetes - Helm:无法用非 tls 表覆盖表
- android - Recyclerview 预览显示灰屏,android.support.v7.widget.RecyclerView 居中
- html - jquery验证select2.js中的errorPlacement