Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test whether a file exists anywhere in the include path

Tags:

include

php

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:

  • Can I test for existence of a file anywhere in the include path?
  • Is it really problematic to do @include($calculatedPath);?

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.

like image 958
shealtiel Avatar asked Mar 31 '11 05:03

shealtiel


1 Answers

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;
    }
}
like image 105
salathe Avatar answered Nov 13 '22 08:11

salathe