我想要传输文件,我不想将它保存在我的ram或hdd上。我正在谈论为每个观众单独流式传输高清视频。
有我的代码:
// ...
ob_start();
header('...'); // I am sending some headers here
ob_flush(); flush(); ob_clean();
$handle = fopen('http://example.com/bigMovie.mp4', 'rb');
ob_flush(); flush(); ob_clean();
while(!feof($handle)) // do this until is the end of the file
{
echo fread($handle, 102400); // reading 100 kb from file
ob_flush(); flush(); ob_clean(); // sending it to the user, cleaning ram
}
ob_end_flush(); // finished sending the file
fclose($handle); // closing the remote connection to example.com
// ...
当我尝试向观看者发送 bigMovie.mp4 时,我的服务器的硬盘已满。
我做了什么?我的代码有什么问题吗? 感谢。
答案 0 :(得分:0)
这应该有效:
# Send headers
header('...');
header('...');
header('...');
...
# Send file
readfile('http://example.com/bigMovie.mp4');
readfile()
读取文件(甚至通过http远程读取)并立即输出它的内容。
顺便说一下,你对ob_*
函数的使用毫无意义。在使用之前,您需要了解输出控件在php中的工作原理。手册是一个很好的起点:http://php.net/manual/en/ref.outcontrol.php
答案 1 :(得分:0)
@ hek2mgl
假设这些是您要传输给用户的文件。您可以将文件放在CDN中。根据您的托管偏好,以下是一些重要的参与者。
您可以使用Amazon Web Service的Cloudfront进行流式传输。 http://aws.amazon.com/cloudfront/streaming/
RackSpace CDN流媒体 http://www.rackspace.com/knowledge_center/frequently-asked-question/getting-started-with-cloud-files-streaming