从php stdin保存大文件

从php stdin保存大文件,php,post,stream,Php,Post,Stream,请告诉我从php stdin保存大文件的最佳方法。 iOS开发者将大型视频内容发送到服务器,我必须将其存储到文件中 我用视频数据读取stdin线程并将其写入文件。例如,通过这种方式: $handle = fopen("php://input", "rb"); while (!feof($handle)) { $http_raw_post_data .= fread($handle, 8192); } 什么功能更适合使用?file\u get\u contents或fread

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

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

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

什么功能更适合使用?file\u get\u contents或fread或其他什么?

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

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

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

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

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

我同意@hek2mgl的观点,将其视为一个多部分表单上传是最有意义的,但是如果您不能更改输入接口,那么您可以在流上使用,而不是自己循环文件

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

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

如果您使用nginx作为web服务器,我建议您可以继续上传

如果您可以影响上传过程,我建议您将其作为多部分表单数据发送。它将通过$u文件以这种方式提供,web服务器本身将处理文件的上载并将其保存到文件系统。期待这是最有效的方式。hek2mgl,谢谢你的回答。将来我们会尝试用mime功能重新制作上传过程,但现在我们想这样做。谢谢您的解释。