readfile() 和 fopen() 之间的区别
difference between readfile() and fopen()
这两个代码在读取文件时做同样的事情,所以主要区别是什么?
1-第一个代码:
$handle = fopen($file, 'r');
$data = fread($handle, filesize($file));
2秒代码:
readfile($file);
阅读文档,readfile 读取全部内容并将其写入 STDOUT。
$data = fread($handle, filesize($file));
而fread将内容放入变量$data中。
fread()
和 readfile()
之间存在显着差异。
首先,readfile()
做了很多 fread()
做不到的事情。 readfile()
打开文件读取,读取,然后打印到输出缓冲区,一气呵成。 fread()
只做其中一件事情:它从给定的文件句柄中读取字节。
此外,readfile()
有一些 fread()
没有的好处。例如,它可以利用可用的 memory-mapped I/O 而不是较慢的磁盘读取。这显着提高了读取文件的性能,因为它将进程从 PHP 本身委托给操作系统调用。
勘误表
I previously noted that readfile()
could run without PHP (this is corrected below).
对于真正的大文件(想想像媒体文件或大型存档备份这样的几个演出),您可能需要考虑将文件的读取完全从 PHP 委托给 X-Sendfile
headers 到您的网络服务器(这样您的 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
这两个代码在读取文件时做同样的事情,所以主要区别是什么?
1-第一个代码:
$handle = fopen($file, 'r');
$data = fread($handle, filesize($file));
2秒代码:
readfile($file);
阅读文档,readfile 读取全部内容并将其写入 STDOUT。
$data = fread($handle, filesize($file));
而fread将内容放入变量$data中。
fread()
和 readfile()
之间存在显着差异。
首先,readfile()
做了很多 fread()
做不到的事情。 readfile()
打开文件读取,读取,然后打印到输出缓冲区,一气呵成。 fread()
只做其中一件事情:它从给定的文件句柄中读取字节。
此外,readfile()
有一些 fread()
没有的好处。例如,它可以利用可用的 memory-mapped I/O 而不是较慢的磁盘读取。这显着提高了读取文件的性能,因为它将进程从 PHP 本身委托给操作系统调用。
勘误表
I previously noted that
readfile()
could run without PHP (this is corrected below).
对于真正的大文件(想想像媒体文件或大型存档备份这样的几个演出),您可能需要考虑将文件的读取完全从 PHP 委托给 X-Sendfile
headers 到您的网络服务器(这样您的 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