28

当您想要包含 PHP 文件时,您应该使用哪一个?

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

或者

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

?

4

4 回答 4

37

file_exists()或者is_readable()
当您想要包含 PHP 文件时应该使用哪一个?

这取决于您是否想知道是否存在文件目录,或者是否都可以,以及是否需要检查是否可读。

有时您只关心文件和/或目录是否存在,而不需要阅读,有时您还需要阅读。

选项

文件已存在()

检查文件目录是否存在。

如果您明确地只想知道文件是否存在,这将返回误报,如果它是目录则返回 true。

是可读的()

判断文件目录是否存在并且可读。

如果您明确地只想知道文件是否可读,这可能会返回误报,如果它是目录则可能返回 true。


您未提及但可能需要的其他选项:

is_file()

告诉它是否存在并且是一个常规文件(不是目录)。

is_dir()

告诉它是否存在并且是一个目录(不是一个文件)。

解决方案与答案

如果要检查存在并且:

  1. 只是一个文件:使用is_file()
  2. 只是一个目录:使用is_dir()
  3. 是文件还是目录:使用file_exists()

如果要检查存在且可读:

  1. 并且是唯一的文件:使用is_file()is_readable()
  2. And is only dir: 使用is_dir()andis_readable()
  3. 是文件还是目录:使用is_readable()

您不需要一起使用file_exists()andis_readable()因为is_readable()还会检查 if file_exists()。与or
配对仅用于检查是否仅文件上或仅 在目录上专门可读。 is_readable()is_file()is_dir()


依赖需求

与大多数 PHP 和“什么是最好的方法/功能/等”一样 - 这取决于场景。

仅仅依靠require管理系统是否挂起并没有真正的用处。想象一下所需的文件不可用,因此 PHP 因 require 失败而停止,但该文件只是文章图像或用户头像 - 你真的不想提供网站导航、徽标、链接、各种页面文本和内容只是因为缺少文章图片?

VITAL:
如果文件是允许提供整个页面内容的数据库连接类,那么文件不存在可能需要系统停止。
当然,您应该有某种退出策略,例如提供 404 页面或错误消息 - “抱歉,出现错误,我们会调查”等。

非重要:
文件不存在有时是有效的,或者至少不会损害应用程序的其余部分。
例如,如果图像文件不存在,您可以提供消息或默认图像,例如如果找不到用户头像,则用户头像将只有一个默认头像。

于 2015-06-05T19:16:49.883 回答
9

如果您要访问require文件,则错误检查毫无意义。使用requireinstead of 的include目的是在文件不存在时拖拽脚本的执行。

如果您不关心文件是否存在,只需使用include.

于 2011-07-07T01:00:08.760 回答
9

答案是:is_readable()

bool is_readable ( 字符串 $filename )

判断文件是否存在并且是否可读。

http://us3.php.net/manual/en/function.is-readable.php

于 2011-07-07T03:37:21.697 回答
7
if (is_file($file) && is_readable($file))

因为is_readable($file)也可以true用于目录。

于 2015-04-08T14:10:37.200 回答