2012-02-02 4 views
0

Я хотел бы сделать это:Как проверить, существует ли файл без ошибок?

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"), который работает хорошо. Я думаю, что проблема заключается в пути (path/a/b/c /), но как проверить, не создавая путь первым.

Спасибо.

+1

Вы, кажется, отвечаете на свой вопрос, используйте правильный путь –

+0

Можете ли вы показать точный пример пути, который вы передаете 'file_exists()', и это неверно возвращает true? Вы на 100% уверены, что на 100% тот же путь, что и в вашей функции? –

+0

Будет лучше, если вы покажете реальный код, так как в этом не будет никаких проблем. – Seagull

ответ

0

Ваша проблема здесь:

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

Не только вы не присваивая значение возврата к чему-либо, но fopen() занимает требуется второй аргумент, который вы не используете.

1

Это не правильный способ скрыть ошибки с помощью @. Все ошибки должны быть правильно обработаны. В другом случае отладка будет больно.

Кроме того, в будущем вы можете использовать функцию is_readable(), чтобы убедиться, что файл не только существует, но также доступен для чтения, например. у вас достаточно разрешений.

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(); 
} 
-3

Вы можете отключить сообщения об ошибках, добавив следующую строку в верхней части страницы PHP

error_reporting (0);

+1

«Мальчик, эти детекторы дыма наверняка раздражали, прежде чем я вытащил батареи! Скажите, вы что-то жгли?» –

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 помощь Вам.

mode параметр в fopen функция не является обязательной как @Jack Maney указал. Вы должны использовать один из возможных значений режима, full list.