is_file / file_exists performance e cache

Ho fatto alcuni test per confrontare e misurare la velocità di entrambe le funzioni. is_file sembra essere molto più veloce (ho usato 10000 iterazioni per entrambi) di file_exists . Mi chiedo se PHP o OS usano un po 'di cache per queste funzioni o fa sempre l'accesso all'HDD? Penso di no, ma mi chiedo …

Ho usato questo codice:

<?php $time = microtime(); $time = explode(' ', $time); $begintime = $time[1] + $time[0]; for($i=0;$i<10000;$i++) file_exists('/Applications/MAMP/htdocs/index.php'); $time = microtime(); $time = explode(" ", $time); $endtime = $time[1] + $time[0]; $totaltime = ($endtime - $begintime); echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>'; $time = microtime(); $time = explode(" ", $time); $begintime = $time[1] + $time[0]; for($i=0;$i<10000;$i++) is_file('/Applications/MAMP/htdocs/index.php'); $time = microtime(); $time = explode(" ", $time); $endtime = $time[1] + $time[0]; $totaltime = ($endtime - $begintime); echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>'; ?> 

Quando si utilizza stat (), lstat () o una qualsiasi delle altre funzioni elencate nell'elenco delle funzioni interessate (sotto), PHP memorizza nella cache le informazioni restituite da tali funzioni per fornire performance più veloci. Tuttavia, in alcuni casi, è ansible cancellare le informazioni memorizzate nella cache. Ad esempio, se lo stesso file viene controllato più volte all'interno di un singolo script e tale file rischia di essere rimosso o modificato durante l'operazione di tale script, è ansible deselect la cache di stato. In questi casi, è ansible utilizzare la function clearstatcache () per cancellare le informazioni che PHP memorizza nella cache di un file.

Le funzioni interessate includono stat (), lstat (), file_exists (), is_writable (), is_readable (), is_executable (), is_file (), is_dir (), is_link (), filectime (), fileatime (), filemtime () , fileinode (), filegroup (), fileowner (), filesize (), filetype () e fileperms ().

Il PHP memorizza nella cache sia is_file() che file_exists() nella cache delle statistiche. Chiama clearstatcache() per cancellarlo.

Modificare:
Se mai, i due dovrebbero impiegare una quantità di tempo simile perché entrambi chiamano la function stat() operativo , ma i risultati di uno possono essere memorizzati nella cache per l'altro da PHP (a less che non si clearstatcache() ) o dal sistema operativo come menzionato da Yuliy in basso .

is_file e file_exists sono due funzioni diverse che fanno due cose diverse; file_exists controlla solo se il file esiste, is_file se la destinazione è un file valido e (per esempio) non una directory.

Non dovrebbero essere usati per lo stesso objective, quindi il confronto delle performance non può essere fatto (imho)