【发布时间】:2013-10-03 19:53:50
【问题描述】:
我有一个用于下载 mp4 视频文件的 php 脚本。它现在可以正常处理小文件(测试最大 60 MB)。当我尝试一个大的(300 MB)时,它显示与“内存限制”相关的错误。因此,在 ini 文件中进行了一些编辑,以将内存限制增加到 400 MB (memory_limit = 400M)。然后我尝试运行我的脚本,但下载框显示的内容大小为 189 字节。我用另一个 mp4 文件(小尺寸)试了一下,效果很好。我不明白它的原因。所以请指导我。我的脚本如下..
$file = $_SERVER['DOCUMENT_ROOT']."/folder_name/filename.mp4";
$filesize = filesize($file);
$fileName=$file;
$offset = 0;
$length = $filesize;
if ( isset($_SERVER['HTTP_RANGE']) ) {
$partialContent = true;
preg_match('/bytes=(\d+)-?/', $_SERVER['HTTP_RANGE'], $matches);
$offset = intval($matches[1]);
$length = $filesize - $offset;
}else {
$partialContent = false;
}
$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);
if ( $partialContent ) {
header('HTTP/1.1 206 Partial Content');
header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}
header("Content-type: video/mp4");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');
print($data);
显示的下载框是..
【问题讨论】:
-
如果它显示的内容大小为 189 字节,则该脚本可能出错并且该文件的内容可能是该错误的文本,请在文本编辑器中打开该文件并查看。
-
尝试`ini_set('memory_limit', '300M'); ` 但是,如果您不需要进行任何类型的验证,为什么不将 mp4 文件放在一个目录中,让用户直接从服务器下载?
-
@Patrick Evans:非常感谢。正如您所说,出现“已用尽 *** 字节的允许内存大小”的错误。所以我在脚本中添加了一行代码(ini_set('memory_limit','-1'))。现在 pblm 已解决..非常感谢.. :)