2

这两个代码在读取文件时都做同样的事情,那么主要区别是什么?

1-第一个代码:

$handle = fopen($file, 'r');
$data = fread($handle, filesize($file));

2秒代码:

readfile($file);
4

2 回答 2

4

fread()和之间存在显着差异readfile()

首先,readfile()做了一些没有做的事情fread()readfile()打开文件进行读取,读取它,然后一次性将其打印到输出缓冲区。fread()只做其中一件事情:它从给定的文件句柄中读取字节

此外,readfile()还有一些fread()没有的好处。例如,它可以利用可用的内存映射 I/O,而不是较慢的磁盘读取。这显着提高了读取文件的性能,因为它将进程从 PHP 本身委托给了操作系统调用。

勘误表

我之前注意到readfile()可以在没有 PHP 的情况下运行(下面已更正)。

对于真正的大文件(想想像媒体文件或大型存档备份这样的几个演出),您可能需要考虑将文件的读取从 PHP 完全委托X-Sendfile给您的网络服务器(这样您就不会让您的 PHP 工作者被束缚上传的长度可能需要数小时)。

所以你可以做这样的事情而不是readfile()

<?php
/* process some things in php here */
header("X-Sendfile: /path/to/file");
exit; // don't need to keep PHP busy for this
于 2020-01-09T18:10:54.197 回答
2

阅读文档,readfile读取整个内容并将其写入 STDOUT。

$data = fread($handle, filesize($file));

而 fread 将内容放入变量 $data 中。

于 2020-01-09T18:07:50.337 回答