PHP5.3 con FastCGI problema de almacenamiento en caché a través de diferentes solicitudes

StackOverflow https://stackoverflow.com/questions/3146397

  •  01-10-2019
  •  | 
  •  

Pregunta

He diseñado un / que utiliza un mecanismo de caché sencilla archivos javascript bundler y Minifier hoja de estilo. Simplemente escribe en un archivo de la marca de tiempo de cada uno de los archivos empaquetados y compara esas marcas de tiempo para evitar volver a escribir el "archivo maestro" de nuevo. De esta manera, después de una actualización de la aplicación (en este caso mi página web), donde se modificaron los archivos CSS o JS, una única solicitud desencadenaría el almacenamiento en caché de nuevo sólo una vez. Esta y todas las demás peticiones a continuación, vería un archivo compilado como master.css? V = 1234567.

La cosa es, bajo mi entorno de desarrollo, pasan en todos los ensayos, la integración funciona muy bien y todo funciona como se esperaba. Sin embargo, en mi entorno de ensayo, en un servidor con PHP5.3 compilado con FastCGI, mis archivos almacenados en caché parece que se reescrito con datos no válidos, pero sólo cuando no se solicita desde el mismo navegador.

Caso de uso:

  • Me hacen la primera solicitud en Firefox, bajo Linux. Todo funciona como se espera para cada otras peticiones en ese navegador.
  • Tan pronto como hago una solicitud en Windows / Linux (IE7, IE8, Chrome, etc) mi archivo de caché obtiene datos no válidos, pero sólo en el servidor intermedio se ejecuta bajo FastCGI, no en fase de desarrollo!
  • El corredor otra solicitud en Firefox copia en la caché el archivo correctamente.

A continuación, me preguntaba, hace FastCGI tiene nada que ver con eso? Pensé que los clientes de navegador o incluso sistemas operativos no tienen nada que ver con el código del lado del servidor.

Sé que este problema se describe en abstracto, pero pegar cualquier código concreto sería demasiado pesada de la OMI, pero lo hará si puede aclarar mi pregunta.

He tratado de depuración remota mi código, y se encontró que todo seguía funcionando como se esperaba, aunque el archivo almacenado en caché se escribe correctamente. Vi que cuando se produce el error, el archivo se escribe con los datos esperados, pero luego se vuelve con datos no válidos reescrito después de dos segundos -después de PHP ha terminado su ejecución -!

¿Hay una manera de desactivar el almacenamiento en caché que FastCGI para solicitudes específicas a través de una función de PHP tal vez?

¿Fue útil?

Solución

En función de su entorno, usted podría mirar a trabajar algo fuera usando .htaccess en Apache para servir a esas solicitudes en modo CGI regular. Esto probablemente se podría hacer con un simple AddHandler, y la acción que apunta a la cgi directamente. Este tipo de da por supuesto que va a desplegar en algún tipo de entorno de alojamiento compartido en la que no tiene acceso directo a la configuración de Apache.

Desde fastcgi persiste el proceso para una cierta cantidad de tiempo, tiene sentido que se podría clobbering el archivo en un momento posterior después de la ejecución inicial, a pesar de lo que el error en particular podría ser está más allá de mí.

No es de mucha ayuda, ya sé, pero podría darle algunas ideas ...

EDIT: Aquí está el código .htaccess de mi comentario abajo

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top