stream_resolve_include_path()
(PHP 5 >= 5.3.2, PHP 7)
Resolve filename against the include path
说明
stream_resolve_include_path(string $filename): string
Resolve$filenameagainst the include path according to the same rules asfopen()/include.
参数
- $filename
The filename to resolve.
返回值
Returns astringcontaining the resolved absolute filename,或者在失败时返回FALSE
.
范例
Example #1stream_resolve_include_path()example
Basic usage example.
<?php var_dump(stream_resolve_include_path("test.php")); ?>
以上例程的输出类似于:
string(22) "/var/www/html/test.php"
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.
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.
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)