Как проверить, существует ли файл без ошибок? - PullRequest
0 голосов
/ 03 февраля 2012

Мне нравится это делать:

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 ]

1 голос
/ 09 января 2013

Проверьте, существует ли данный файл и действительно ли он является файлом:

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() также может проверить, существует ли данный каталог и поможет ли он вам.

Параметр

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

1 голос
/ 03 февраля 2012

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

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

1 голос
/ 03 февраля 2012

Необходимо включить проверку ошибок с помощью 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();
}
0 голосов
/ 03 февраля 2012

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

error_reporting (0);

0 голосов
/ 03 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...