测试文件是否存在于包含路径中的任何位置

she*_*iel 10 php include

我正在编写一个自动加载函数,并且在它的内部逻辑中,它想测试某个文件是否存在于包含它之前的路径中的某个位置.

这是逻辑:

如果名为的文件$className'.specialversion.php'存在于包含路径中的任何位置,则包括它.否则,让其他自动加载器负责包含此类的文件.

目前我只是这样做: @include($calculatedPath);

我不确定这是否是一个包含和抑制错误的好方法.在包含它之前,我宁愿检查文件是否存在(包含路径中的某个位置).

我的问题是:

  • 我可以测试包含路径中任何位置是否存在文件?
  • 这真的有问题@include($calculatedPath);吗?

编辑

一个重要的口音:我不知道该文件应该在哪里.我只是想知道它是否存在于include路径的其中一个目录中.所以我不能做file_exists()或类似的事情.

sal*_*the 33

从PHP 5.3.2开始,可以选择使用stream_resolve_include_path()其目的的函数

根据与fopen()/ include()相同的规则,对包含路径解析[a]文件名.

如果文件存在于其中一个包含路径上,则将返回该路径(包括文件名).否则(即文件不在任何包含路径上)它将返回FALSE.

根据您的需求,您的自动加载器可能看起来像:

function my_autoloader($classname) {
    $found = stream_resolve_include_path($classname . '.specialversion.php');
    if ($found !== FALSE) {
        include $found;
    }
}
Run Code Online (Sandbox Code Playgroud)