file_get_contents慢于include吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (71)

有一个文件缓存系统为我经常使用的PHP 5库。当提出请求时,我检查一个缓存文件,如果有一个我渲染并退出。

$contents = file_get_contents( self::_cacheFile() );
echo $contents;
exit();     

我必须做file_get_contents而不是仅仅包含因为与讨厌的缓存的xml文件

`<?xml version="1.0"?>` 

有没有更好的方式拉入我的缓存文件?

提问于
用户回答回答于

如果只想输出文件内容,则应该使用readfile()。这比file_get_contents()更快,内存更少

用户回答回答于

由于include会评估文件的内容,例如通过PHP解释器运行并使用include_path查找文件,所以我会说include速度较慢。file_get_contents只会将文件的内容视为字符串。更少的开销,更快的速度。

手册页

file_get_contents()是将文件内容读入字符串的首选方法。如果您的操作系统支持,它将使用内存映射技术来提高性能。

但是,如果你在输出文件之后,而不是将其转换为字符串,readfile()则甚至比速度快一点file_get_contents。鉴于include'ing会输出任何非PHP内容,这可能更有可能是我猜测后的结果。

我的台式机上修正的基准:

$start1 = microtime(1);
for($i=0; $i<100000; $i++) {
    include 'log.txt';
}
$end1 = microtime(1) - $start1;

$start2 = microtime(1);
for($i=0; $i<100000; $i++) {
    echo file_get_contents('log.txt');
}
$end2 = microtime(1) - $start2;

$start3 = microtime(1);
for($i=0; $i<100000; $i++) {
    readfile('log.txt');
}
$end3 = microtime(1) - $start3;

结果

echo PHP_EOL, $end1, // 137.577358961
     PHP_EOL, $end2, // 136.229552984
     PHP_EOL, $end3; // 136.849179029

扫码关注云+社区

领取腾讯云代金券