It really behaves like `include` and will only resolve the filename against the include-path, if the path is relative. It makes not much sense to resolve already absolute pathnames anyway.
(PHP 5 >= 5.3.2, PHP 7)
stream_resolve_include_path — Résout un nom de fichier suivant les règles du chemin d'inclusion
$filename
)
Résout le nom de fichier filename
en utilisant
le chemin d'inclusion, en utilisant les mêmes règles que les fonctions
fopen()/include.
filename
Le nom de fichier à résoudre.
Retourne une chaîne de caractères contenant le nom de fichier absolu résolu,
ou FALSE
si une erreur survient.
Exemple #1 Exemple avec stream_resolve_include_path()
Exemple simple d'utilisation.
<?php
var_dump(stream_resolve_include_path("test.php"));
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
string(22) "/var/www/html/test.php"
It really behaves like `include` and will only resolve the filename against the include-path, if the path is relative. It makes not much sense to resolve already absolute pathnames anyway.
In case you're running a version of PHP that doesn't have this function...
if (!function_exists('stream_resolve_include_path')) {
/**
* Resolve filename against the include path.
*
* stream_resolve_include_path was introduced in PHP 5.3.2. This is kinda a PHP_Compat layer for those not using that version.
*
* @param Integer $length
* @return String
* @access public
*/
function stream_resolve_include_path($filename)
{
$paths = PATH_SEPARATOR == ':' ?
preg_split('#(?<!phar):#', get_include_path()) :
explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $prefix) {
$ds = substr($prefix, -1) == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR;
$file = $prefix . $ds . $filename;
if (file_exists($file)) {
return $file;
}
}
return false;
}
}
stream_resolve_include_path() seems to cache it's output. After I renamed a file, I had to restart Apache for stream_resolve_include_path() to not return non-existing file name. This was on Windows.
This seems to be a great alternative to file_exists.
if( file_exists(__DIR__.'/som-file.php') )
Goes way slower than:
if( stream_resolve_inlcude_path(__DIR__.'/som-file.php') !== false)