这两个代码在读取文件时都做同样的事情,所以主要区别是什么?
1-第一个代码:
$handle = fopen($file, 'r');
$data = fread($handle, filesize($file));
第二个密码:
readfile($file);
fread()
和readfile()
之间有显着差异。
首先,readfile()
做许多fread()
不做的事情。 readfile()
打开文件进行读取,读取,然后一次将其全部打印到输出缓冲区。 fread()
仅执行以下操作之一:它从给定的文件句柄中读取字节。
另外,readfile()
具有fread()
没有的一些好处。例如,它可以利用memory-mapped I/O(如果可用)而不是降低磁盘读取速度。由于它将文件的分发过程委托给PHP本身,而不是委托给操作系统调用,因此,这大大提高了读取文件的性能。
我之前注意到
readfile()
可以在没有PHP的情况下运行(下面已更正)。
对于真正的大文件(例如媒体文件或大型档案备份等几场演出,您可能要考虑将文件的读取完全由X-Sendfile
标头委派给PHP,而不是委派给您的网络服务器(这样您就不必使您的PHP工作者的上载时间可能长达数小时)。
因此您可以执行类似这样的操作,而不是readfile()
:
<?php
/* process some thing sin php here */
header("X-Sendfile: /path/to/file");
exit; // don't need to keep PHP busy for this