• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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)