【发布时间】:2019-06-02 10:10:51
【问题描述】:
我的 PHP 脚本正在从客户端接收大量数据 (100 - 500 MB)。我希望我的 PHP 脚本运行得快,而且不占用太多内存。
为了节省流量,我不使用 Base64 或表单数据。我直接在 POST 请求中发送二进制数据。
数据由两部分组成:2000 字节标头,其余部分必须作为文件存储在服务器上。
$fle = file_get_contents("php://input",FALSE,NULL,2000);
file_put_contents("file.bin", $fle);
问题是file_get_contents忽略了offset参数,从0字节开始读取数据,有没有更好的办法呢?
** 我不想读取整个数据并切掉最后 N-2000 个字节,因为我担心它会占用太多内存。
【问题讨论】:
-
substr($fle, 2000) -
首先不要创建另一个变量-$fle-
file_put_contents("file.bin", file_get_contents("php://input",FALSE,NULL,2000)); -
@Accountantم 仍然会将所有内容读入内存,然后再将其刷新到磁盘。
-
@Sammitch 是的,我知道,这只会阻止在内存中创建另一个数据副本。顺便说一句,你发布的答案很好,我做了类似的缓冲区before
-
@Accountantم 啊,我看错了你之前的评论。无论有没有变量赋值,它都应该是 1x。