stream_resolve_include_path

(PHP 5 >= 5.3.2, PHP 7, PHP 8)

stream_resolve_include_path根据 include 路径解析文件名

描述

stream_resolve_include_path(string $filename): string|false

根据与 fopen()/include 相同的规则,根据 include 路径解析 filename

参数

filename

要解析的文件名。

返回值

返回一个包含已解析的绝对文件名的 string,或者在失败时返回 false

示例

示例 #1 stream_resolve_include_path() 示例

基本使用示例。

<?php
var_dump
(stream_resolve_include_path("test.php"));
?>

以上示例将输出类似于

string(22) "/var/www/html/test.php"

添加注释

用户贡献的注释 5 个注释

5
zelnaga at gmail dot com
10 年前
如果您正在运行没有此功能的 PHP 版本...

if (!function_exists('stream_resolve_include_path')) {
/**
* 根据 include 路径解析文件名。
*
* stream_resolve_include_path 是在 PHP 5.3.2 中引入的。这有点像 PHP_Compat 层,适用于那些没有使用该版本的层。
*
* @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;
}
}
5
tambet dot matiisen at gmail dot com
11 年前
stream_resolve_include_path() 似乎缓存了它的输出。在重命名文件后,我不得不重新启动 Apache 才能让 stream_resolve_include_path() 不返回不存在的文件名。这是在 Windows 上。
2
kawewong at gmail dot com
3 年前
在某些情况下,例如这种情况,您不能在不解析其路径的情况下使用 `realpath()` 或 `file_exists()`。

示例

file.php
subfolder/
..|- included.php
..|- subfolder/
.........|- another-included.php

file.php 内容
```
<?php
var_dump
(file_exists('subfolder/included.php'));// true
include 'subfolder/included.php';
?>
```

subfolder/included.php 内容
```
<?php
var_dump
(file_exists('subfolder/another-included.php'));// false 但该文件确实存在。
var_dump(file_exists(stream_resolve_include_path('subfolder/another-included.php')));// 使用 `stream_resolve_include_path()` 函数,它现在返回 true。
include 'subfolder/another-included.php';// 工作正常,没有错误。
?>
```

subfolder/subfolder/another-included.php 内容
```
<?php
echo 'Hello world';
?>
```
0
sebastian dot krebs at kingcrunch dot de
13 年前
它的行为确实类似于 `include`,并且只会根据 include 路径解析文件名,如果路径是相对的。无论如何,解析已经存在的绝对路径名没有多大意义。
-16
kontakt at victorjonsson dot se
12 年前
这似乎是 `file_exists` 的一个很好的替代方法。

if( file_exists(__DIR__.'/som-file.php') )

比这要慢得多

if( stream_resolve_inlcude_path(__DIR__.'/som-file.php') !== false)
To Top