【发布时间】:2016-05-18 15:18:06
【问题描述】:
我通过GuzzleHttp\Stream\Stream 类在PHP 中使用流。在使用它时,我遇到了 PHP 内存分配问题。有没有一种我可以使用的不占用太多内存的方法?
问题
当我需要提供 0-381855148 字节的内容范围(例如)时,这会导致我出现内存分配问题。有没有一种方法可以在不需要那么多内存的情况下提供内容?直接传递数据而不是“保留”在内存中的东西?
这是导致错误的代码的一部分...
$stream = GuzzleHttp\Stream\Stream::factory(fopen($path, 'r'));
$stream->seek($offset);
while (!$stream->eof()) {
echo $stream->read($length);
}
$stream->close();
这是作为我的流的回调函数传递的。
背景
首先我尝试通过为我的流提供最大块长度来解决问题。我通过给我的流一个最大偏移量来做到这一点。它修复了内存分配问题,但在分发我的动态视频内容时,Firefox 出现了新问题。 Chrome 没有问题。
这是因为 Firefox 要求“0-”内容范围,但我返回内容范围“0-”。相反,我需要归还整个范围(直到最大值),但这会导致臭名昭著的“允许的 262144 字节内存大小用尽(试图分配 576 字节)”错误。
免责声明:它实际上有点技术性。但我想保持简单。
有人知道解决方案吗? 谢谢。
【问题讨论】:
-
您收到错误消息或?
-
允许的内存大小为 262144 字节已用尽(尝试分配 576 字节)是我得到的错误
标签: php memory video-streaming