Подтвердить что ты не робот

File_exists() или is_readable()

Какой из них следует использовать, если вы хотите включить файл PHP?

if(file_exists($file) require "$file";

или

if(is_readable($file) require "$file";

?

4b9b3361

Ответ 1

file_exists() или is_readable()
Какой из них следует использовать, если вы хотите включить файл PHP?

Это зависит от того, хотите ли вы знать, существует ли только файл или каталог, или если все в порядке, и если вам нужно проверить, является ли это удобочитаемым или нет.

Иногда вам нужен только файл и/или каталог, и вам не нужно читать, иногда вам также нужно читать.

Функции

file_exists()

Проверяет, существует ли файл или каталог.

Если вы явно хотите знать, существует ли файл, это вернет ложные срабатывания, которые вернут true, если это каталог.

is_readable()

Сообщает, существует ли файл или каталог и доступен для чтения.

Если вы явно хотите знать, доступен ли файл для чтения, это, скорее всего, вернет ложные срабатывания, которые могут вернуть true, если это каталог.


Дополнительные параметры, о которых вы не упомянули, но, возможно, нуждаетесь:

is_file()

Сообщает, существует ли он и является обычным файлом (а не каталогом).

is_dir()

Сообщает, существует ли он и является каталогом (а не файлом).

Решение и ответ

Если вы хотите проверить существует и:

  • Это только файл: используйте is_file()
  • Это только каталог: Используйте is_dir()
  • Файл или каталог: используйте file_exists()

Если вы хотите проверить существует и читается:

  • И только файл: используйте is_file() и is_readable()
  • И только dir: используйте is_dir() и is_readable()
  • И файл или каталог: используйте is_readable()

Вам не нужно использовать file_exists() и is_readable() вместе, потому что is_readable() также проверяет, есть ли file_exists().
Сопряжение is_readable() с помощью is_file() или is_dir() заключается только в том, чтобы проверить, читается ли это только файл или только в каталоге.


Опираясь на запрос

Как и в большинстве PHP и "какой лучший подход/функция/etc" - это зависит от сценария.

Использование только require для управления, зависает ли система или нет, не очень полезно. Представьте, что требуемый файл недоступен, поэтому PHP останавливается по мере необходимости, но файл представляет собой просто изображение статьи или пользовательский аватар. Вы действительно не хотите обслуживать навигацию по сайту, логотип, ссылки, все виды текста и содержимого страницы только потому, что недостающего изображения статьи?

VITAL:
Если файл является классом подключения к базе данных, который позволяет обслуживать весь контент страницы, тогда файл, который не существует, скорее всего, требует остановки системы.
Конечно, у вас должна быть какая-то стратегия выхода, например, на странице 404 или сообщение об ошибке "Извините, что была ошибка, мы рассмотрим ее" и т.д.

NON VITAL:
Иногда бывает, что файл не существует или, по крайней мере, не вреден для остальной части приложения. Например, если файл изображения не существует, вы можете использовать сообщение или изображение по умолчанию, например, аватар пользователя будет иметь аватар по умолчанию, если их не будет найдено.

Ответ 3

Если вы перейдете в require файл, нет никакой точки в проверке ошибок. Точка использования require вместо include заключается в том, чтобы выполнить выполнение script, когда файл не существует.

Если вам все равно, существует ли файл, просто используйте include.

Ответ 4

if(is_file($file) && is_readable($file))

потому что is_readable верно для каталогов.