Вход Регистрация
Файл: forsoc.ru/vendor/symfony/config/Symfony/Component/Config/FileLocator.php
Строк: 81
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentConfig;

/**
 * FileLocator uses an array of pre-defined paths to find files.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class FileLocator implements FileLocatorInterface
{
    protected 
$paths;

    
/**
     * Constructor.
     *
     * @param string|array $paths A path or an array of paths where to look for resources
     */
    
public function __construct($paths = array())
    {
        
$this->paths = (array) $paths;
    }

    
/**
     * {@inheritdoc}
     */
    
public function locate($name$currentPath null$first true)
    {
        if (
'' == $name) {
            throw new 
InvalidArgumentException('An empty file name is not valid to be located.');
        }

        if (
$this->isAbsolutePath($name)) {
            if (!
file_exists($name)) {
                throw new 
InvalidArgumentException(sprintf('The file "%s" does not exist.'$name));
            }

            return 
$name;
        }

        
$paths $this->paths;

        if (
null !== $currentPath) {
            
array_unshift($paths$currentPath);
        }

        
$paths array_unique($paths);
        
$filepaths = array();

        foreach (
$paths as $path) {
            if (
file_exists($file $path.DIRECTORY_SEPARATOR.$name)) {
                if (
true === $first) {
                    return 
$file;
                }
                
$filepaths[] = $file;
            }
        }

        if (!
$filepaths) {
            throw new 
InvalidArgumentException(sprintf('The file "%s" does not exist (in: %s).'$nameimplode(', '$paths)));
        }

        return 
$filepaths;
    }

    
/**
     * Returns whether the file path is an absolute path.
     *
     * @param string $file A file path
     *
     * @return bool
     */
    
private function isAbsolutePath($file)
    {
        if (
$file[0] === '/' || $file[0] === '\'
            || (strlen($file) > 3 && ctype_alpha($file[0])
                && $file[1] === '
:'
                && ($file[2] === '
\' || $file[2] === '/')
            )
            || null !== parse_url($file, PHP_URL_SCHEME)
        ) {
            return true;
        }

        return false;
    }
}
Онлайн: 0
Реклама