我的PHP脚本正在从客户端接收大数据(100-500 MB)。我希望我的PHP脚本能快速运行,而不占用太多内存。
为节省流量,我不使用Base64或表单数据。我直接在POST请求中发送二进制数据。
数据由两部分组成:2000 Bytes标头,其余部分必须作为文件存储在服务器上。
$fle = file_get_contents("php://input",FALSE,NULL,2000);
file_put_contents("file.bin", $fle);
问题是file_get_contents
会忽略offset参数,并从字节0中读取数据。有没有更好的方法呢?
**我不想读取整个数据并切掉最后的N-2000字节,因为我担心它会占用过多的内存。
答案 0 :(得分:3)
使用较低级别的文件IO功能,一次读/写一点。
$bufsz = 4096;
$fi = fopen("php://input", "rb");
$fo = fopen("file.bin", "wb");
fseek($fi, 2000);
while( $buf = fread($fi, $bufsz) ) {
fwrite($fo, $buf);
}
fclose($fi);
fclose($fo);
这将以4kB的块读取/写入。