【问题标题】:Does file_get_contents use cache? If it does how do I prevent?file_get_contents 是否使用缓存?如果确实如此,我该如何预防?
【发布时间】:2017-01-20 11:46:03
【问题描述】:

使用此代码:

for($i = 1; $i <= $times; $i++){
    $milliseconds = round(microtime(true) * 1000);
    $res = file_get_contents($url);
    $milliseconds2 = round(microtime(true) * 1000);

    $milisecondsCount = $milliseconds2 - $milliseconds;
    echo 'miliseconds=' . $milisecondsCount . ' ms' . "\n";
}

我得到这个输出:

miliseconds=1048 ms
miliseconds=169 ms
miliseconds=229 ms
miliseconds=209 ms
....

但是有睡眠:

for($i = 1; $i <= $times; $i++){
    $milliseconds = round(microtime(true) * 1000);
    $res = file_get_contents($url);
    $milliseconds2 = round(microtime(true) * 1000);

    $milisecondsCount = $milliseconds2 - $milliseconds;
    echo 'miliseconds=' . $milisecondsCount . ' ms' . "\n";
    sleep(2);
}

这个:

miliseconds=1172 ms
miliseconds=1157 ms
miliseconds=1638 ms
....

那么这里发生了什么?

【问题讨论】:

  • 在回显后尝试unset($res) for 循环...
  • 这没有帮助...
  • 也许服务器本身缓存了一些服务于 URL 的内容?
  • 您的信息流来自哪里?将stream_context_create($arrContextOptions) 解释为来源。
  • 没有 $arrContextOptions 的结果相同。

标签: php laravel


【解决方案1】:

我的问题:

1) 为什么不使用clearstatcache 自己测试一下,并在使用和不使用它的情况下检查拍号?

2) 您的测试方法很糟糕,作为第一个修复 - 您是否尝试过交换以便“睡眠”阅读功能首先播放而不是第二个?

3) 您完成了多少次测试迭代?
如果少于 10,000 次,那么我建议您重复测试,以确保首先确定平均延迟(或缺少延迟),然后是什么让您想到这是专门由缓存引起的吗?

4) 规格是什么。每次迭代时您的机器、您的 RAM 以及可用和可用内存?

5) 你的服务器上线了吗?您是否能够消除可能导致时间差异的外部服务? (比如杀毒、后台进程加载、服务器流量等)?

我的回答:

但是,操作系统级缓存可能会将最近使用的文件缓存到 使访问更快,但我不会指望那些 可用的。

多次调用文件引用只会读取文件 从磁盘一次,后续调用将从 函数中的静态变量。请注意,您不应该指望 这种方法适用于大文件或每页仅使用一次的文件,因为 静态变量使用的内存将持续到结束 请求。不必要地将文件的内容保持在静态中 变量是让你的脚本占用内存的好方法。

引自This answer

  • 对于远程(非本地文件系统)文件,有很多可能导致可变延迟的原因,以至于 file_get_contents 缓存在选项列表中远远落后。

  • 当您声称使用localhost/ 参考结构进行连接时,我会冒险(但不确定)您的服务器将使用各种防火墙和检查技术来检查传入请求,这将添加一个大变量到所用的时间。

【讨论】:

    【解决方案2】:

    将随机查询字符串与 url 连接起来。 例如:$url = 'http://example.com/file.html?r=' . rand(0, 9999);

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2016-09-07
      相关资源
      最近更新 更多