保存php stdin中的大文件

时间:2013-01-06 23:38:11

标签: php post stream

请告诉我从php stdin保存大文件的最佳方法。 iOS开发人员向我发送大量视频内容到服务器,我必须将其存储到文件中。

我用视频数据读取stdin线程并将其写入文件。例如,以这种方式:

$handle = fopen("php://input", "rb");    
while (!feof($handle)) {
      $http_raw_post_data .= fread($handle, 8192);
}

哪种功能更好用? file_get_contents或fread还是别的什么?

3 个答案:

答案 0 :(得分:3)

我同意@ hek2mgl认为将此视为多部分表单上传最有意义,但如果您无法更改输入界面,那么您可以在流上使用file_put_contents()而不是自己循环浏览文件

$handle = fopen("php://input", "rb");  
if (false === file_put_contents("outputfile.dat", $handle))
{
  // handle error
}
fclose($handle);

它比遍历文件更干净,而且可能更快(我还没有测试过)。

答案 1 :(得分:2)

不要使用file_get_contents,因为它会尝试将文件的所有内容加载到字符串中

FROM PHP DOC

  

file_get_contents()是将文件内容读入字符串的首选方法。如果操作系统支持,它将使用内存映射技术来提高性能。

我确定您只想在服务器上创建电影文件..这是一种更有效的方法

$in = fopen("php://input", "rb");
$out = fopen('largefile.dat', 'w');

while ( ! feof($in) ) {
    fwrite($out, fread($in, 8192));
}

答案 2 :(得分:0)

如果您使用nginx作为网络服务器,我想建议nginx upload module可以恢复上传。