file_get_contents 或 fopen 用于读取几 MB 的 php://input?

发布于 2024-12-11 07:09:55 字数 463 浏览 0 评论 0原文

这似乎是一个重复的问题,但事实并非如此:我通过 php:/input (1-500mb) 收到了几兆字节的数据,我必须将其保存在文件中。使用以下命令更能提高性能(服务器负载、速度):

file_put_contents($filename, file_get_contents('php://input'))

OR

$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);

$target = fopen($filename, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);

This might seem to be a repeated question, but it is not: I receive several megabytes of data via php:/input (1-500mb) that I have to save in a file. Is more perfomance-wise (server load, speed) using :

file_put_contents($filename, file_get_contents('php://input'))

OR

$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);

$target = fopen($filename, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲影 2024-12-18 07:09:56

还有一个较短的版本: copy

  copy("php://input", $filename);

PHP 已经在内部实现了您的代码的功能。 (不确定这会产生可衡量的差异)。虽然我不确定为什么你要先创建一个临时文件。

如果输入文件最大为 500 MB,则 file_get_contents 方法无论如何都不起作用,因为它必须将所有数据保存在字符串/内存中。

There is a shorter version still: copy

  copy("php://input", $filename);

PHP already internally implements what your code does. (Not sure it would make a measurable difference). Albeit I'm uncertain why you'd create a temporary file first.

And if the input file is up to 500 MB, then the file_get_contents approach wouldn't work anyway, as it had to keep all that data in a string / memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文