Просто наткнулся на это сегодня, но мне здесь не понравились ответы, поэтому я решил добавить свое решение (используя SPL и итератор регулярных выражений)
function _file_exists( $pathname ){
if(file_exists($pathname)) return $pathname;
try{
$path = dirname( $pathname );
$file = basename( $pathname );
$Dir = new \FilesystemIterator( $path, \FilesystemIterator::UNIX_PATHS );
$regX = new \RegexIterator($Dir, '/(.+\/'.preg_quote( $file ).')$/i', \RegexIterator::MATCH);
foreach ( $regX as $p ) return $p->getPathname();
}catch (\UnexpectedValueException $e ){
//invalid path
}
return false;
}
Способ, которым я используюэто выглядит так:
$filepath = 'path/to/file.php';
if( false !== ( $filepath = _file_exists( $filepath ))){
//do something with $filepath
}
Таким образом, он сначала будет использовать встроенную единицу, в случае неудачи он будет использовать нечувствительный и назначит правильный регистр переменной $filepath
.