is_file / file_existiert Leistung und Cache

7

Ich habe einige Tests gemacht, um die Geschwindigkeit beider Funktionen zu vergleichen und zu messen. is_file scheint mehrere Male schneller zu sein (ich habe 10000 Iterationen für beide verwendet) als file_exists . Ich frage mich, ob PHP oder OS einen Cache für diese Funktionen verwenden oder auf HDD zugreifen? Ich denke nein, aber ich frage mich ...

Ich habe diesen Code verwendet:

%Vor%     
chubbyk 04.11.2010, 16:53
quelle

3 Antworten

8
  

Wenn Sie stat (), lstat () oder eine beliebige Zahl verwenden   der anderen Funktionen aufgelistet in der   Liste betroffener Funktionen (unten), PHP   speichert die Information diese Funktionen   zurück, um schneller zu liefern   Performance. Jedoch in bestimmten   Fälle, möchten Sie möglicherweise die löschen   zwischengespeicherte Informationen. Zum Beispiel, wenn   Die gleiche Datei wird überprüft   mehrere Male in einem einzigen Skript,   und diese Datei ist in Gefahr zu sein   entfernt oder verändert währenddessen   Skript-Operation können Sie wählen   Löschen Sie den Status-Cache. In diesen   Fälle, können Sie die verwenden   clearstatcache () - Funktion zum Löschen der   Informationen, die PHP über einen Cache speichert   Datei.

     

Betroffene Funktionen sind stat (),   lstat (), file_exists (), is_writable (),   is_readable (), is_executable (),   is_file (), is_dir (), is_link (),   filectime (), Dateizeit (), Dateizeit (),   fileinode (), Dateigruppe (), Dateibesitzer (),   Dateigröße (), Dateityp () und   fileperms ().

    
Mark Baker 04.11.2010, 16:57
quelle
9

PHP speichert sowohl is_file() als auch file_exists() im Statistik-Cache zwischen. Rufen Sie clearstatcache() auf, um es zu löschen.

Bearbeiten:
Wenn überhaupt, sollten die beiden ähnliche Zeit benötigen, da sie beide die Funktion stat() aufrufen >, aber die Ergebnisse von einem können für den anderen von PHP zwischengespeichert werden (außer Sie clearstatcache() ) oder vom Betriebssystem, wie Yuliy unten erwähnt.

    
Powerlord 04.11.2010 16:56
quelle
2

is_file und file_exists sind zwei verschiedene Funktionen, die zwei verschiedene Dinge tun; file_exists prüft nur, ob die Datei existiert, is_file sagt, ob das Ziel eine gültige Datei ist und (zum Beispiel) kein Verzeichnis.

Sie sollten nicht für dasselbe Ziel verwendet werden, so dass der Leistungsvergleich nicht möglich ist (imho)

    
Strae 04.11.2010 16:57
quelle

Tags und Links