Estoy tratando de leer mis constantes de un archivo JSON usando

$const = file_get_contents('/myfolder/const.json');

El problema es que esto siempre leerá el archivo de la memoria caché y no de mi servidor XAMPP local. Durante la fase de desarrollo, este archivo es dinámico debido a ediciones y termino borrando la memoria caché del navegador cada vez que hay un cambio en el archivo. ¿Cómo puedo obligar a leer siempre desde el servidor (la latencia para hacerlo durante la fase de desarrollo está bien. Cambiaré a la implementación normal posterior a la implementación, ¿cómo?) Cualquier ayuda es apreciada.

php
1
Nitin Mistry 23 oct. 2017 a las 16:37

3 respuestas

La mejor respuesta

Hay un par de soluciones "aceptadas".

La primera es agregar una marca de tiempo al archivo como

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

También puedes probar esto

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");

Sugiero agregar uno de estos, borrar su caché y luego intentar ejecutar el código. Agregar la marca de tiempo al archivo me funcionó cuando lo agregué antes de comenzar a recuperar y volver a cargar la página.

3
thomasw_lrd 23 oct. 2017 a las 13:42

Puede hacer lo siguiente para invalidar la memoria caché cada vez que se actualice el archivo

$filePath = "/myfolder/const.json";
$const = file_get_contents($filePath."?k=".filemtime($filePath));
1
Tarun 23 oct. 2017 a las 13:40

Si está ejecutando un servidor web estándar como Apache o Nginx, la mejor idea sería enviar un encabezado Cache-Control, justo lo que hace un navegador.

Entonces, para file_get_contents necesitaría crear un recurso de contexto como:

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

Y finalmente, la solicitud:

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

Además, probablemente no sea una buena idea depender del chroot proporcionado por el servidor. En su lugar, proporcione una ruta absoluta al archivo por __DIR__ . /myfolder/const.json que no hará que tenga que lidiar con todo el dolor de la invalidación de caché. O, usando algo como http:// . $_SERVER['SERVER_ADDR'] . '/myfolder/const.json que nuevamente haría que tengas que lidiar con todo el caché PITA.

1
Ikari 23 oct. 2017 a las 13:55