2016-01-26 89 views
2

真的很奇怪的問題,我似乎有。file_get_contents()返回緩存頁

我打電話給url上的file_get_contents()來獲取電子郵件的html。

這樣的 -

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

我用的時候,這方法1000。

當我調用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 

我得到相同的默認頁面。但是,如果我在我的機器上捲曲它,我會得到正確的主頁。有沒有某種緩存?

嘗試過無數次搜索但卡住了。任何幫助非常感謝!

+1

Curl和file_get_contents都不會緩存結果。如果連接通過代理,代理可能會響應頁面的緩存版本,但不太可能。真的沒有太多的信息繼續下去。頁面被請求的可能性足以阻止它並提供不同的頁面。他們也可能阻止某些用戶代理或類似的請求。 –

+0

如果他們選擇阻止某個請求並用404響應重播,他們應該受到指責! – Federkun

+0

這是我的服務器/網站,所以沒有阻止任何東西。它更像是一個服務器DNS緩存而不是頁面緩存。 – sebtucknott

回答

1

如果有一個緩存,您可以通過添加一個參數到您的請求中並使用當前時間戳來避免它。

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

它將強制服務器獲取請求的資源。

+0

它似乎更像是一個dns緩存而不是文件緩存,因爲它爲存在的頁面返回404。我也嘗試了get參數。 – sebtucknott

0

所以我設法弄清楚了這個問題。

看來這個特定的域同時具有A記錄和AAAA(IPv6)記錄。哪一點指向不同的服務器。看來大多數機器都在使用A記錄,而出於某種原因,這臺服務器正在使用AAAA記錄。

由於常見的DNS檢查程序僅顯示我見過的A記錄,因此最初並不容易發現。

我發現了這一點,通過調用 -

curl -v -I http://www.example.com 

這將返回呼叫的IP地址。

我希望這可以幫助別人,我已經失去了幾個小時!