这两个代码在读取文件时都做同样的事情,那么主要区别是什么?
1-第一个代码:
$handle = fopen($file, 'r');
$data = fread($handle, filesize($file));
2秒代码:
readfile($file);
fread()
和readfile()
之间存在显着差异。
首先,readfile()
做了很多fread()
没有做的事情。readfile()
打开文件进行读取,读取它,然后将其一次性打印到输出缓冲区。fread()
只做其中一件事:它从给定的文件句柄读取字节。
此外,readfile()
还有一些fread()
没有的好处。例如,它可以在可用的情况下利用内存映射 I/O,而不是较慢的磁盘读取。这显著提高了读取文件的性能,因为它将进程从 PHP 本身委派给操作系统调用。
勘误表
我之前注意到
readfile()
可以在没有PHP的情况下运行(这在下面更正(。
对于真正的大文件(想想像媒体文件或大型存档备份这样的几个演出(,您可能需要考虑将文件的读取完全从 PHP 中委派给X-Sendfile
标头到您的 Web 服务器(这样您就不会让您的 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
读取文档时,readfile会读取整个内容并将其写入STDOUT。
$data = fread($handle, filesize($file));
而 fread 将内容放入变量$data中。