请告诉我从php stdin保存大文件的最佳方法。 iOS开发人员向我发送大量视频内容到服务器,我必须将其存储到文件中。
我用视频数据读取stdin线程并将其写入文件。例如,以这种方式:
$handle = fopen("php://input", "rb");
while (!feof($handle)) {
$http_raw_post_data .= fread($handle, 8192);
}
哪种功能更好用? file_get_contents或fread还是别的什么?
答案 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
,因为它会尝试将文件的所有内容加载到字符串中
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可以恢复上传。