PHP:file_get_contents()强制从服务器而不是缓存

时间:2017-10-23 13:37:43

标签: php

我正在尝试使用

从JSON文件中读取常量
$const = file_get_contents('/myfolder/const.json');

问题是这将始终从缓存中读取文件,而不是从本地XAMPP服务器读取。在开发阶段,由于编辑,此文件是动态的,每当文件发生更改时,我最终都会清除浏览器缓存。我怎么能强制总是从服务器读取(在开发阶段这样做的延迟很好。我将切换到正常的部署后 - 如何?)?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

有几个"被接受"的解决方案。

第一种是向文件添加时间戳,如

$const = file_get_contents('/myfolder/const.json?'.date("Ymdhis"));

你也可以尝试这个

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

我建议添加其中一个,清除缓存然后尝试运行代码。在我开始编写和重新加载页面之前添加它时,为文件添加时间戳对我有用。

答案 1 :(得分:1)

每次文件更新时,您都可以执行以下操作使缓存无效

 import * as svgPanZoomImport from 'svg-pan-zoom';
 const svgPanZoom = svgPanZoomImport;

 svgPanZoom(element);

答案 2 :(得分:0)

如果您正在运行像Apache或Nginx这样的标准网络服务器,最好的办法就是发送一个Cache-Control标题,就像浏览器所做的那样。

因此,对于file_get_contents,您需要创建一个上下文资源,如:

$context = [
    'http' => [
        'header' => "Cache-Control: no-cache\r\n" .
            "Pragma: no-cache\r\n"
    ]
];

最后,请求:

$file = file_get_contents('/myfolder/const.json', false, $context);

此外,依赖服务器提供的chroot可能不是一个好主意。而是通过__DIR__ . /myfolder/const.json提供文件的绝对路径,这不会使您必须处理缓存失效的所有痛苦。或者,使用类似http:// . $_SERVER['SERVER_ADDR'] . '/myfolder/const.json的内容,这将再次使您必须处理所有缓存PITA。