我需要在PHP页面中包含一个HTML页面(由ASP.net生成)。
为此,我使用:
echo file_get_contents("http://example.com");
但是这样我的服务器每次打开页面都需要下载页面。
我想添加缓存系统,但每次 example.com 内容发生变化时我都需要刷新缓存。
什么是最好的方法(如果有的话)检测内容是否在每次整个页面没有下载的情况下被更改?
这里是远程页面的HTTP标头:
HTTP/1.1 200 OK =>
Cache-Control => no-cache
Pragma => no-cache
Content-Length => 63648
Content-Type => text/html; charset=utf-8
Expires => -1
Server => Microsoft-IIS/7.5
Set-Cookie => ASP.NET_SessionId=xxxxxxxxxxxxxxxx; path=/; HttpOnly
X-Powered-By => ASP.NET
X-AspNet-Version => 4.0.30319
X-UA-Compatible => chrome=1
X-CID => 2-18
Date => Thu, 12 Sep 2013 08:54:59 GMT
Connection => close
另一个网站给了我这些:
Server Response HTTP/1.1 200 OK
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 65367
Content-Type: text/html; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
Set-Cookie: ARRSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;Path=/;Domain=.example.com
Set-Cookie: ASP.NET_SessionId=xxxxxxxxxxxxxxxxxxx; path=/; HttpOnly
X-Powered-By: UrlRewriter.NET 2.0.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-UA-Compatible: chrome=1
X-Powered-By: ARR/2.5
X-Powered-By: ASP.NET
X-CID: 1-18
Date: Thu, 12 Sep 2013 08:56:03 GMT
答案 0 :(得分:3)
假设您的服务器支持它,最好的方法是使用所述页面的标题。
具体来说,只要您的网络服务器支持,就检查If-Modified-Since
,它正是您所需要的。
此外,您可以检查ETags标头,该标头将提供内容的标识符。页面上的更改应更改标识符(通常使用的是页面生成的时间戳)。同样,这取决于服务器配置。
答案 1 :(得分:3)
您可以使用cURL检索标题,重新加载文件或根据
的值提供缓存版本Last-Modified: Fri, 14 Sep 2012 21:51:00 GMT
头
答案 2 :(得分:1)
我已经使用了@Prasanth的解决方案,但这只是一个评论,我无法设置答案,所以我在这里写。
如果他想在这里写下答案,我会将其设置为解决方案。
有关您服务器上的缓存,请参阅此内容。知道什么时候来源 改变了,你必须找到一些与服务器有关的东西。喜欢 服务器是否有
content-length
标头?如果是这样,你就可以知道了 如果此值更改,则刷新页面。但如果网站不是 完全在你的控制之下,或者你无法确切知道何时 页面已更改,您需要刷新缓存在您的文件 服务器时不时,可能使用cron作业。编辑:还检查 如果服务器具有Last-Modified标头,如Ruben所说。
因此,检查content-length
可以解决问题。
答案 3 :(得分:-4)
int filemtime ( string $filename )
返回您的上次修改日期 - 如果它是您的缓存时间之后 - 您可以重新加载页面,如果没有从缓存中获取它。