Frage

Ich habe einen Stylesheet / Javascript-Dateien Bündler und minifier entwickelt, um einen einfachen Cache-Mechanismus, dass Anwendungen. Es schreibt einfach in eine Datei, um den Zeitstempel jedes gebündelten Dateien und vergleicht diese Zeitstempel wieder Umschreiben der „Master-Datei“ zu verhindern. Auf diese Weise nach einem Programm-Update (hier meine Website), wo CSS oder JS-Dateien geändert wurden, eine einzige Anforderung würde das Caching wieder nur einmal auslösen. Diese und alle anderen Anfragen würden dann eine kompilierte Datei wie master.css sehen? V = 1234567.

Die Sache ist, unter meiner Entwicklungsumgebung, alle Tests bestehen, funktioniert die Integration groß und alles funktioniert wie erwartet. Doch auf meiner Staging-Umgebung, auf einem Server mit PHP5.3 mit FastCGI kompilierte, meine Cache-Dateien scheinen mit ungültigen Daten zu erhalten neu geschrieben, aber nur, wenn sie nicht aus dem gleichen Browser angefordert.

Anwendungsfall:

  • Ich mache die erste Anfrage auf Firefox unter Linux. Alles funktioniert wie für alle anderen Anfragen auf diesem Browser erwartet.
  • Sobald ich einen Antrag auf Windows / Linux machen (IE7, IE8, Chrom, usw.) meine Cache-Datei wird ungültige Daten, sondern nur auf dem Testserver unter FastCGI ausgeführt wird, nicht in der Entwicklung!
  • Laufen eine weitere Anforderung auf Firefox zurück recaches die Datei korrekt.

Ich wurde dann fragen, tut FastCGI etwas damit zu tun hat? Ich dachte, Browser-Clients oder sogar Betriebssysteme nichts mit Server-Code zu tun haben.

Ich weiß, dass dieses Problem abstrakt beschrieben, aber keinen konkreten Code einfügen wäre auch schwer IMO, aber ich werde es tun, wenn es meine Frage klären kann.

Ich habe versucht, remote meinen Code debuggen, und fand, dass alles noch wie erwartet funktionieren, auch die Cache-Datei richtig geschrieben wird. Ich sehe, dass, wenn der Fehler auftritt, wird die Datei mit den erwarteten Daten geschrieben wird, aber dann mit ungültigen Daten zurück nach zwei Sekunden neu geschrieben wird -Bitte php seine Ausführung beendet hat -!

Gibt es eine Möglichkeit zu deaktivieren, das FastCGI-Caching für spezifische Anforderungen über eine PHP-Funktion vielleicht?

War es hilfreich?

Lösung

Abhängig von der Umgebung, können Sie mit .htaccess in Apache sehen etwas aus bei Arbeits diese Anforderungen in regelmäßigen cgi-Modus zu dienen. Dies könnte wahrscheinlich mit nur einem einfachen AddHandler getan werden, und Maßnahmen, die Punkte auf die cgi direkt. Diese Art der davon ausgeht, dass Sie irgendeine Art von Shared-Hosting-Umgebung eingesetzt, wo Sie keinen direkten Zugriff auf die Apache-Konfiguration haben.

Da fastcgi den Prozess für eine gewisse Zeit bestehen bleibt, macht es Sinn, dass es könnte die Datei zu einem späteren Zeitpunkt nach der ersten Ausführung werden clobbering, obwohl das, was der jeweilige Fehler über mich sein könnte, ist.

Nicht viel Hilfe, ich weiß, aber können Sie ein paar Ideen ...

EDIT: Hier ist der .htaccess-Code von meinem Kommentar unten

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top