如何检查文件是否存在且没有错误?

时间:2012-02-02 20:21:00

标签: php file

我喜欢这样做:

if (file_exists( "path/a/b/c/file.txt" )) {
   fopen("path/a/b/c/file.txt");  ----------> ERROR
   do_this_if_file_exists();

}
else {
   do_this_if_not_exists();
}

不幸的是,我收到以下错误:

fopen(path/a/b/c/file.txt) [function.fopen]: failed to open stream: No such file or directory 

我在使用file_exists做错了什么?

此外,当我调用文件存在时,路径如:file_exists( "file.txt" ),效果很好。我认为问题是路径(路径/ a / b / c /),但如何在不首先创建路径的情况下验证。

感谢。

5 个答案:

答案 0 :(得分:1)

用@隐藏错误不是一种正确的方法。应正确处理所有错误。在其他情况下,调试将是一个痛苦。

此外,对于将来,您可以使用is_readable()函数来确保文件是否不仅存在而且是可读的,例如你有足够的权限。

答案 1 :(得分:1)

您需要在fopen中包含错误检查:

if (file_exists( "path/a/b/c/file.txt" )) 
{
   $fh=fopen("path/a/b/c/file.txt","r"); #or whatever mode you want...
   if($fh!==false)
   {
      do_this_if_file_exists_and_can_be_opened();
   }
   else
   {
      die("Couldn't open the file.  Sorry!\n");
   }
}
else {
   do_this_if_not_exists();
}

答案 2 :(得分:1)

检查给定文件是否存在以及它是否真的是文件:

if (file_exists( "path/a/b/c/file.txt" ) && is_file("path/a/b/c/file.txt")) {
    $file_handler = @fopen("path/a/b/c/file.txt", MODE_IS_NOT_OPTIONAL)
    if($file_handler !== false){
        do_things_with_file_handler();
    } else {
        throw_some_error();
    }
}
else {
    do_this_if_not_exists();
}

函数file_exists()也可以检查给定的目录是否存在,并且该shluod可以帮助你。

@Jack Maney指出,mode函数中的

fopen参数不是可选的。您必须使用其中一种模式可能的值full list

答案 3 :(得分:0)

你的问题在这里:

fopen("path/a/b/c/file.txt");

您不仅没有将返回值分配给任何内容,而且fopen()采用您未使用的必需的第二个参数。

答案 4 :(得分:-3)

您可以通过在php页面顶部添加此行来关闭错误报告

的error_reporting(0);