PHP filemtime Funktion - "Stat fehlgeschlagen für"

8

Ich habe ein Problem mit der PHP-Dateizeitfunktion. In meiner Webapp verwende ich Smarty Template Engine mit Caching Option. In meiner Webapp kann ich einige Aktionen ausführen, die Fehler erzeugen, aber wir können uns auf nur eine Aktion konzentrieren. Wenn ich auf Link auf der Seite klicke, werden einige Inhalte aktualisiert - ich kann einige Male klicken und alles ist in Ordnung, aber über eine Anfrage auf 10 schlägt fehl. Folgender Fehler tritt auf:

%Vor%

und die Zeile, die das Problem verursacht:

%Vor%

Wie Sie sehen, existiert die Datei, weil sie markiert ist.

Problematische Codezeile ist in smarty_internal_cacheresource_file.php (Teil von Smarty lib v3.0.6) enthalten.

App wird auf einem UNIX-System, externem Hosting, ausgeführt.

Irgendwelche Ideen? Soll ich mehr Details veröffentlichen?

    
lbednaszynski 19.08.2011, 11:18
quelle

3 Antworten

10

file_exists verwendet intern die access Systemaufruf, der Berechtigungen als real Benutzer überprüft, während filemtime stat , die die Überprüfung als effektiver Benutzer durchführt. Daher kann das Problem in der Annahme eines effektiven Benutzers == echter Benutzer begründet sein, der nicht gilt. Eine andere Erklärung wäre, dass die Datei zwischen den beiden Aufrufen gelöscht wird.

Da sich sowohl das Ergebnis von $_template->getCachedFilepath() als auch das Vorhandensein der Datei zwischen Systemaufrufen ändern kann, warum rufen Sie file_exists überhaupt auf? Stattdessen würde ich nur vorschlagen,

%Vor%

Wenn $_template->getCachedFilepath() auf einen Dummy-Wert wie false gesetzt werden kann, verwenden Sie Folgendes:

%Vor%     
phihag 19.08.2011, 11:24
quelle
2

Verwenden:

%Vor%

Lesen Sie dies und dies

    
kbec 16.05.2012 11:53
quelle
0

Ich habe filemtime erfolgreich benutzt, ohne "file_exists" seit Jahren zu überprüfen. Die Art und Weise, wie ich die Dokumentation immer interpretiert habe, ist, dass FALSE bei irgendeinem Fehler von "filemtime" zurückgegeben werden sollte. Dann ist vor ein paar Tagen etwas sehr Seltsames passiert. Wenn die Datei nicht vorhanden war, wurde mein Cron-Job mit einem Ergebnis beendet. Das Ergebnis lag nicht in der Programmausgabe, sondern in der Cron-Ausgabe. Die Nachricht war "Dateilänge überschritten". Ich wusste, dass der Cron-Job auf der filemtime-Anweisung endete, weil ich mir vor und nach dieser Aussage eine E-Mail geschickt habe. Die "Nachher" -E-Mail ist nie angekommen.

Ich habe eine file_exists-Prüfung in die Datei eingefügt, um den Cron-Job zu reparieren. Dies hätte jedoch nicht notwendig sein sollen. Ich weiß immer noch nicht, was auf dem Hosting-Server geändert wurde, den ich verwende. Mehrere andere Cron-Jobs begannen am selben Tag zu scheitern. Ich weiß noch nicht, ob sie etwas mit Dateizeit zu tun haben.

    
Jeff 05.09.2011 19:08
quelle

Tags und Links