2016-09-29 2 views
0

Ich verwende Grav CMS auf einem Linode Ubuntu 16.04 Server, wobei PHP7 (php-fpm + nginx) zwischengespeicherte Ergebnisse zurückgibt, wenn Verzeichnisinhalte aufgelistet werden. Ich habe zuerst das Problem mit FilesystemIterator, aber es ist nicht auf diese Klasse beschränkt - das gleiche Problem tritt auf, wenn ich scandir verwenden.PHP listet Dateien auf, die nicht existieren

Im Grunde, was passiert, ist, dass jedes Mal, wenn ich neue Inhalte auf dem Server synchronisieren, ob ich rsync oder FTP verwenden, PHP werden die alten Inhalte eines bestimmten folder.I've zurückzukehren versucht clearstatcache nennen, aber es hat nicht geholfen - auch wenn ich es aus der entsprechenden PHP-Datei aufgerufen habe, kurz bevor ich das Verzeichnis durchsucht habe.

touch 'die Dateien zu aktualisieren ihre mtime hilft auch nicht. Der Neustart des php-fpm-Dienstes funktioniert jedoch.

Ist es möglich, dass PHP den Inhalt des Verzeichnisses auf andere Weise zwischenspeichert? Könnte es das Dateisystem sein, das PHP irgendwie täuscht?

+0

Schauen Sie in der nginx.conf und stellen Sie sicher, sendfile, ist auf aus gesetzt. –

Antwort

0

Es stellt sich heraus, das Problem, das ich hatte, war nicht auf das Betriebssystem oder PHP, sondern auf das Grav CMS selbst - insbesondere wie es Seitenobjekte zwischenspeichert. Zwischengespeicherte Seiten werden nicht ungültig, wenn sich lediglich die zugehörigen Mediendateien geändert haben. Die Deaktivierung der globalen Cache-Einstellung für Grav half dieses Problem, aber ich habe auch an issue on the Grav repo geöffnet, um zu sehen, ob dies ein intendiertes Verhalten ist oder nicht.

1

Da ist, aber es ist nicht etwas, was ich in der Produktion verwenden würde.

Erste Synchronisierung ausführen: $ sync Dieser Befehl schreibt alle Cachedaten, die nicht auf die Festplatte geschrieben wurden, auf die Festplatte.

Freie Pagecache: echo 1 > /proc/sys/vm/drop_caches

Freie Dentries und Inodes: echo 2 > /proc/sys/vm/drop_caches

Freies Pagecache, und Inodes Dentries: echo 3 > /proc/sys/vm/drop_caches

Davon abgesehen habe ich auch einen Blick auf realpath_cache nehmen würde.

+1

Es stellte sich heraus, dass das Problem mit dem System war, das ich verwendete (Grav CMS), und wie es Seitenobjekte im Cache speicherte. Ich werde die Frage bearbeiten und meine eigene Antwort mit der Lösung liefern, aber danke für Ihre Antwort! – fredrikekelund

Verwandte Themen