2012-11-19 125 views
9

我看了file_exists()如果指向一个目录也可以返回。检查是否只有文件退出的最快方法是什么?PHP检查文件是否存在而不是目录

目前我有:

/** 
* 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; 
} 

我找到了许多关于检查是否在PHP文件退出,但没有谈到有关目录以及如何最好地检查这个职位。

这种方法可以叫1000s的时间,所以我真的可以做得尽可能快。

+1

你应该得到什么结果对* *符号链接的文件? –

回答

21

您正在寻找的is_file功能:

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

从文档:“注意:因为PHP的整数类型是有符号的,并且许多平台使用32位整数,所以对于大于2GB的文件,某些文件系统函数可能会返回意外结果。”这有什么好担心的吗? 99%的时间没有文件会达到这个尺寸,除非它的日志文件失控 –

+0

另外这使我不能使用is_file http://php.net/manual/en/function.is-file.php#46845 –

+1

@约翰很难说。 *一些* ***可能会返回意想不到的结果......我还没有遇到这种情况,这是一个问题。因人而异。 – deceze

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

你可以试试这个为文件只。它是一个自定义函数,你会调用,而不是file_exists功能

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