PHP:接收和存储大型二进制数据

时间:2019-01-07 18:09:47

标签: php binary

我的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字节,因为我担心它会占用过多的内存。

1 个答案:

答案 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的块读取/写入。