readfile()和fopen()之间的差异

问题描述 投票:0回答:2

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

1-第一个代码:

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

第二个密码:

readfile($file);
php file-read
2个回答
1
投票

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

1
投票

[阅读文档,readfile读取全部内容并将其写入STDOUT。

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

虽然fread将内容放入变量$ data。

© www.soinside.com 2019 - 2024. All rights reserved.