3

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

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

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

用什么功能比较好?file_get_contents 或 fread 还是别的什么?

4

3 回答 3

3

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

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

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

于 2013-01-06T23:56:43.363 回答
2

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

来自 PHP 文档

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

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

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

while ( ! feof($in) ) {
    fwrite($out, fread($in, 8192));
}
于 2013-01-06T23:47:46.097 回答
0

如果您使用 nginx 作为网络服务器,我想推荐nginx 上传模块,可以恢复上传。

于 2013-01-23T22:45:33.383 回答