Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在删除网站的所有缓存页面 脚本_Php_Javascript_Cross Platform_Caching - Fatal编程技术网

Php 正在删除网站的所有缓存页面 脚本

Php 正在删除网站的所有缓存页面 脚本,php,javascript,cross-platform,caching,Php,Javascript,Cross Platform,Caching,移动版和桌面版。 我正在开发一个带有桌面和移动版本的网站:用户可以选择切换版本,如果他们愿意的话:javascript将保存一个cookie,告知所需的版本,并将重新加载页面,并将值“?nocache=1”附加到其url。 页面缓存。 使用以下PHP代码缓存页面: <?php $lastModified=filemtime(__FILE__); $etagFile = md5_file(__FILE__); if(empty($_GET['nocache'])){ $ifModif

移动版和桌面版。
我正在开发一个带有桌面和移动版本的网站:用户可以选择切换版本,如果他们愿意的话:javascript将保存一个cookie,告知所需的版本,并将重新加载页面,并将值“?nocache=1”附加到其url。
页面缓存。
使用以下PHP代码缓存页面:

<?php
$lastModified=filemtime(__FILE__);
$etagFile = md5_file(__FILE__);
if(empty($_GET['nocache'])){
    $ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
    $etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
    header("Etag: $etagFile");
    header('Cache-Control: public');
    if (strtotime($ifModifiedSince)==$lastModified || $etagHeader == $etagFile){
        header("HTTP/1.1 304 Not Modified");
        exit;
    }
}
?>

问题 如果用户更改了站点的版本,PHP代码中缓存的初始条件将导致浏览器再次从服务器加载页面,但所有其他页面将保持缓存状态

我的问题
如果所需的网站版本发生更改,是否有任何方法可以重新加载所有页面?

对不起,我无法从您的问题中准确地说出您想要什么。但是,如果您想确保重新加载页面,有一个非常简单的方法。这是我一直使用的一个,因为Chrome似乎喜欢将页面缓存起来,即使页面已经更改

在URL末尾添加类似“…?do_reload=“+Date.now()”的内容。由于Date.now()将始终与上次加载文件时不同,浏览器将清除缓存并从服务器重新加载文件

从理论上讲,如果您想在某些内容发生更改时重新加载,您可以将该值改为VAR,并将该值设置为false(对于“无重新加载”-再次假设这是在过去设置的)或Date.now(),如果您确实想清除缓存并重新加载

老实说,没有比这更容易的了。我花了太多时间来处理这个问题,并在另一个网站上看到了这个答案。希望这对你有帮助


菲尔姆德夫回答:

在PHP中,编写一个JavaScript变量,其中包含生成的页面的版本(桌面或移动)。类似于:
echo“var pageVersion=$desktopOrMobile;”

然后在页面加载时添加一个JavaScript,用于比较此变量和cookie。如果他们匹配,一切都很好。如果他们没有,你必须重新加载页面。(类似于:
window.location.href=window.location.href+'?nocache=1';

如果要更改同一浏览器的所有选项卡和窗口中的版本,您甚至可以定期(每秒钟左右)执行此检查

免责声明:

我必须承认,我自己还没有尝试过,但我很肯定这个概念会奏效

另一种方法是以PHP可以读取的方式存储缓存中的版本:要么必须向每个URL追加GET变量,如
?version=mobile
,要么将该信息插入URL本身,如
example.net/mobile/foo/bar
mobile.example.net/foo/bar
。通过这种方式,PHP可以将缓存中的版本与cookie中所需的版本进行比较,并将请求重定向到所需的URL

这个解决方案不需要“nocache hack”,也可以不用JavaScript完成,但我相信这将是更多的工作,因为您必须重写所有链接以包含该版本,或者使用一些URL重写,这可能会破坏到其他资源的链接。因此,我推荐上述答案

如果需要,我将很乐意给出进一步的说明和/或改进我的答案

旁注:

在我看来,你在这里做了一些非常积极的缓存。
您这样做可能有充分的理由,但如果您开始从数据库加载数据或通过
require
包含其他PHP文件,则可能会给您带来很多麻烦,因为您的缓存算法不会注意到这些附加资源是否已更改。

谢谢您的回答。我已经在做一些与您描述的方法相似(但不太准确)的事情,但问题是当用户更改网站版本时,我希望重新加载所有页面,而不仅仅是一个页面。谢谢您的回答!