【问题标题】:file_get_contents() returns cached pagefile_get_contents() 返回缓存页面
【发布时间】:2016-05-03 09:01:42
【问题描述】:

我似乎遇到了非常奇怪的问题。

我在 url 上调用 file_get_contents() 来获取电子邮件的 html。

像这样-

file_get_contents('http://www.mywebsite.co.uk/email.php?name=Seb');

我已经用这种方法上千次了。

当我调用 url 时,即使文件存在,我也会得到 404 标头。经过进一步调查,当我调用根域时,我得到了一些默认的保留页面 -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Refresh" content="0;url=defaultsite" />
<!-- UK -->
</head>
<body>
</body>
</html>

我检查了 DNS 记录,它们似乎是正确的。当我 ping url 时,我得到了正确的服务器 IP。如果我从命令行运行 -

curl http://www.mywebsite.co.uk

我得到相同的默认页面。然而,如果我在我的机器上卷曲它,我会得到正确的主页。有什么缓存吗?!

尝试了无数次搜索,但卡住了。非常感谢任何帮助!

【问题讨论】:

  • Curl 和 file_get_contents 都不会缓存结果。如果您通过代理进行连接,则代理可能会使用页面的缓存版本进行响应,但不太可能。真的没有太多信息可以继续。该页面可能被请求的足够多,以至于他们阻止它并提供不同的页面。他们也可能阻止某些用户代理或类似请求。
  • 如果他们选择阻止某些请求并以 404 响应重放,他们是罪魁祸首!
  • 这是我的服务器/网站,所以不会阻止任何东西。它更像是服务器 dns 缓存而不是页面缓存。

标签: php linux curl dns browser-cache


【解决方案1】:

如果有缓存,您可以通过在请求中添加一个包含当前时间戳的参数来避免它。

file_get_contents('http://www.mywebsite.co.uk/email.php?name=Seb&t='.time());

它将强制服务器获取请求的资源。

【讨论】:

  • 它似乎更像是 dns 缓存而不是文件缓存,因为它为存在的页面返回 404。我也尝试了get参数以防万一。
【解决方案2】:

所以我已经设法找出问题所在。

这个特定域似乎既有 A 记录又有 AAAA (IPv6) 记录。哪个指向不同的服务器。似乎大多数机器都在使用 A 记录,而由于某种原因,该服务器正在使用 AAAA 记录。

最初并不容易发现,因为常见的 DNS 检查器只显示我见过的 A 记录。

我通过调用 -

发现了这一点
curl -v -I http://www.example.com

这将返回调用的 IP 地址。

我希望这对其他人有所帮助,我为此浪费了几个小时!

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 2021-11-24
    • 1970-01-01
    • 2011-02-02
    • 2016-03-22
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多