phpinclude

Test whether a file exists anywhere in the include path


I'm writing an autoload function and in the inner logic of it would like to test whether a certain file exists somewhere in the path prior to including it.

This is the logic:

If a file named $className'.specialversion.php' exists anywhere in the include path include it. Otherwise, let other autoloaders take care of including a file for this class.

At the moment I just do: @include($calculatedPath);

I'm not sure if it's a good approach to include and suppress the error. I would rather check if the file exists (somewhere in the include path) prior to including it.

My question is:

Edit

An important accent: I don't know where the file should be. I just want to know whether it exists in one of the directories in the include path. So I can't just do file_exists() or something like that.


Solution

  • As of PHP 5.3.2 there is the option to use the stream_resolve_include_path() function whose purpose is to

    Resolve [a] filename against the include path according to the same rules as fopen()/include() does.

    If the file exists on one of the include paths, then that path (including the file name) will be returned. Otherwise (i.e. the file was not on any of the include paths) it will return FALSE.

    Relating this to your needs, your autoloader might look something like:

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