提问人:CafeHey 提问时间:2/12/2010 最后编辑:Alix AxelCafeHey 更新时间:4/27/2017 访问量:93422
检查是否存在包含(或要求)
Check if an include (or require) exists
问:
在调用它之前,您如何检查包含/require_once是否存在,我尝试将其放入错误块中,但 PHP 不喜欢这样。
我认为需要付出一些努力,但是这需要整个文件路径,并且无法轻易将相对包含传递到其中。file_exists()
还有其他方法吗?
答:
我相信确实适用于相对路径,尽管您也可以尝试沿着这些思路进行一些操作......file_exists
if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");
...毋庸置疑,您可以将异常替换为您选择的任何错误处理方法。这里的想法是 -statement 验证是否可以包含该文件,并且通常由 输出的任何错误消息都会通过在它前面加上 .if
include
@
评论
include
include
echo
echo()
print()
include_once
require_once
OOP
file_exists
当所需文件相对于当前工作目录时,可以检查它是否存在,因为它适用于相对路径。但是,如果包含文件位于 PATH 上的其他位置,则必须检查多个路径。
function include_exists ($fileName){
if (realpath($fileName) == $fileName) {
return is_file($fileName);
}
if ( is_file($fileName) ){
return true;
}
$paths = explode(PS, get_include_path());
foreach ($paths as $path) {
$rp = substr($path, -1) == DS ? $path.$fileName : $path.DS.$fileName;
if ( is_file($rp) ) {
return true;
}
}
return false;
}
评论
file_exists()
使用相对路径,它还将检查目录是否存在。请改用:is_file()
if (is_file('./path/to/your/file.php'))
{
require_once('./path/to/your/file.php');
}
评论
您还可以检查包含文件中定义的任何变量、函数或类,并查看包含是否有效。
if (isset($variable)) { /*code*/ }
或
if (function_exists('function_name')) { /*code*/ }
或
if (class_exists('class_name')) { /*code*/ }
评论
查看stream_resolve_include_path功能, 它使用与 include() 相同的规则进行搜索。
http://php.net/manual/en/function.stream-resolve-include-path.php
评论
include
我认为正确的方法是:
if(file_exists(stream_resolve_include_path($filepath))){
include $filepath;
}
这是因为文档说,根据与 fopen()/include 相同的规则,将文件名解析为包含路径。stream_resolve_include_path
有些人建议使用 OR,但这不适用于一般用例,因为在一般使用中,如果文件在 file_exists 返回 TRUE 后由于某种原因被阻止或不可用,这是您需要注意的事情,最终用户的脸上会出现非常丑陋的错误消息,否则您以后可能会出现意外和莫名其妙的行为,可能会丢失数据等。is_file
is_readable
评论
file_exists()
:检查文件或目录是否存在。 在这种情况下会更合适。is_file()
is_file()
file_exists()
is_readable()
is_readable()