2012-11-19 23 views
9

Ho letto il file_exists() può anche restituire turno se punta a una directory. Qual è il modo più veloce per verificare se un solo file esce?PHP controlla se il file esiste e non la directory

Al momento ho:

/** 
* Check if the file exists. 
* 
* @return bool 
*/ 
public function exists() { 
    if(is_null($this->_file)) return false; 

    return (!is_dir($this->_file) && file_exists($this->_file)) ? true : false; 
} 

ho trovato un sacco di messaggi relativi al controllo se uscite di file in PHP, ma niente di che parla la directory e il modo migliore per controllare questo.

Questo metodo può essere chiamato 1000s di tempo, quindi potrei davvero fare il più velocemente possibile.

+1

Quale risultato dovresti ottenere per * symlink * per i file? –

risposta

21

Siete alla ricerca per la funzione is_file:

public function exists() { 
    return $this->_file !== null && is_file($this->_file); 
} 
+0

Dalla documentazione: "Nota: poiché il tipo intero di PHP è firmato e molte piattaforme usano interi a 32 bit, alcune funzioni del filesystem potrebbero restituire risultati imprevisti per file di dimensioni superiori a 2 GB." È qualcosa di cui preoccuparsi? Il 99% delle volte nessun file raggiungerà mai questa dimensione a meno che non sia un file di registro fuori controllo –

+0

Anche questo mi mette fuori uso con is_file http://php.net/manual/en/function.is-file.php#46845 –

+1

@ John Difficile da dire. * Alcuni * *** potrebbero restituire risultati imprevisti ... Non ho riscontrato un caso in cui questo era un problema. YMMV. – deceze

2
public function exists() { 
    return !is_dir($this->_file) && file_exists($this->_file); 
} 
1

Si può provare questo per file solo. È una funzione personalizzata che chiamerai invece della funzione file_exists

function custom_file_exists($filePath) 
    { 
      if((is_file($filePath))&&(file_exists($filePath))){ 
      return true; 
      } 
      return false; 
    } 
Problemi correlati