当您想要包含一个PHP文件时,应该使用哪一个?
if(file_exists($file) require "$file";
或者
if(is_readable($file) require "$file";
?
当您想要包含一个PHP文件时,应该使用哪一个?
if(file_exists($file) require "$file";
或者
if(is_readable($file) require "$file";
?
是否应该在想要包含PHP文件时使用file_exists()
或is_readable()
?
这取决于您是只想知道文件或目录是否存在,还是无论哪个都可以,以及是否需要检查可读性。
有时您只关心文件和/或目录是否存在,而不需要读取,有时您也需要读取。
检查文件或目录是否存在。
如果您明确只想知道文件是否存在,则此函数会返回false positive,因为如果它是一个目录,则将返回true。
告诉您文件或目录是否存在且可读。
如果您明确只想知道文件是否可读,则可能会返回false positive,因为它也可能返回true,即使它是一个目录。
您没有提到但可能需要的其他选项:
告诉您它是否存在并且是一个普通的文件(不是目录)。
告诉您它是否存在并且是一个目录(不是文件)。
如果您想检查是否存在并且:
is_file()
is_dir()
file_exists()
如果您想检查是否存在且可读:
is_file()
和is_readable()
is_dir()
和is_readable()
is_readable()
您不需要同时使用file_exists()
和is_readable()
,因为is_readable()
也会检查file_exists()
。
将is_readable()
与is_file()
或is_dir()
配对仅是为了检查是否可以读取特定的文件或目录。
与大多数PHP相关的问题一样,“最佳方法/函数等”取决于情况。
仅依赖于require
来管理系统是否挂起并不是非常有用。想象一下所需的文件不可用,因此当require
失败时,PHP会停止,但该文件仅是文章图片或用户头像-仅仅因为缺少一张文章图片就不想提供站点导航、标志、链接、各种页面文本和内容吗?
重要:
如果该文件是数据库连接类,允许提供整个页面内容,则缺少该文件可能需要系统停止。
当然,您应该有某种退出策略,例如提供404页面或错误消息-“抱歉,出现故障,我们会查看它”等。
非重要:
文件不存在有时是有效的,或者至少不会对其余应用程序造成伤害。
require
用于确保在继续之前文件已存在。如果该文件被 要求,并且文件不存在,则会抛出错误。如果文件对您的页面不是至关重要的话,则使用 include
。 - Nahydrinbool is_readable ( string $filename )
判断文件是否存在且可读。
if (is_file($file) && is_readable($file))
因为is_readable($file)
也可以用于目录,所以需要注意。
is_file()
检查缺失的文章图片,以避免不必要的警告和错误。 - user2757283@require "CustomConst.php";
。意图是这个文件是可选的,所以,@require 如果文件不存在就会静默忽略。现在,在php 7.4中这不再起作用,所以我想用类似if (is_readable('...')) { require_once '...'; }
来替换它。问题是:is_readable()
会扫描所有的包含目录(就像require_once
一样)吗?如果不会,那它在功能上就不是完全相同的替代方案了 :( - undefinedinclude
更合适?不确定这是否能解决问题。 - undefined@require_once "CustomConst.php"
,我猜在早期版本中它是有效的,但在php7.4中会生成一个错误。我的第一反应是用if (file_exists(...)) { require_once "CustomConst.php"; }
来替换它,但接下来的问题是:这个文件应该放在哪里。显然,@require_once会在所有的"include_dirs"中搜索它,但file_exists()
不会。最后,我找到了这个东西:if (stream_resolve_include_path('CustomConst.php') !== false) ...
。这应该按预期工作。 - undefined