【问题标题】:file_exists() or is_readable()file_exists() 或 is_readable()
【发布时间】:2011-09-30 02:08:30
【问题描述】:

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

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

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

?

【问题讨论】:

    标签: php include require file-exists


    【解决方案1】:

    file_exists()is_readable()
    如果要包含 PHP 文件,应该使用哪一个?

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

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

    选项

    file_exists()

    检查文件目录是否存在。

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

    is_readable()

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

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


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

    is_file()

    判断它是否存在并且是一个常规的文件(不是目录)。

    is_dir()

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

    解决方案和答案

    如果要检查存在并且:

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

    如果要检查存在且可读:

    1. 而且只是文件:使用is_file()is_readable()
    2. 而且只是目录:使用is_dir()is_readable()
    3. 并且是文件或目录:使用is_readable()

    您不需要同时使用file_exists()is_readable(),因为is_readable() 还会检查file_exists() 是否。
    is_readable()is_file()is_dir() 配对只是为了检查是否仅在文件上特别 可读或仅在目录上特别 可读。


    依赖require

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

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

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

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

    【讨论】:

    • 迄今为止最好的答案! +1
    • 使用is_file()检查缺少的文章图片,以避免不必要的警告和错误。
    【解决方案2】:

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

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

    【讨论】:

    • 但如果您不确定文件是否存在怎么办?
    • require 用于在继续之前确保文件存在。如果该文件是必需的,如果该文件不存在,它将引发错误。如果文件对您的页面不重要,请使用include
    【解决方案3】:

    答案是:is_readable()

    bool is_readable (string $filename)

    判断文件是否存在 可读。

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

    【讨论】:

    • 是的,但在下面它说“如果文件名指定的文件或 目录 存在并且可读,则返回 TRUE,否则返回 FALSE。”
    • 这是正确的答案。建议应用 "&& is_file($filename)" 以增加文件夹的透明度,因为它们也返回 true。
    【解决方案4】:
    if (is_file($file) && is_readable($file))
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2013-12-21
      • 2011-09-15
      • 2018-10-18
      • 1970-01-01
      • 2012-06-07
      • 2014-06-12
      • 2016-04-29
      相关资源
      最近更新 更多