Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/Smarty/sysplugins/smarty_internal_runtime_getincludepath.php
Строк: 110
<?php
/**
 * Smarty read include path plugin
 *
 * @package    Smarty
 * @subpackage PluginsInternal
 * @author     Monte Ohrt
 */

/**
 * Smarty Internal Read Include Path Class
 *
 * @package    Smarty
 * @subpackage PluginsInternal
 */
class Smarty_Internal_Runtime_GetIncludePath
{
    
/**
     * include path cache
     *
     * @var string
     */
    
public $_include_path '';

    
/**
     * include path directory cache
     *
     * @var array
     */
    
public $_include_dirs = array();

    
/**
     * include path directory cache
     *
     * @var array
     */
    
public $_user_dirs = array();

    
/**
     * stream cache
     *
     * @var string[][]
     */
    
public $isFile = array();

    
/**
     * stream cache
     *
     * @var string[]
     */
    
public $isPath = array();

    
/**
     * stream cache
     *
     * @var int[]
     */
    
public $number = array();

    
/**
     * status cache
     *
     * @var bool
     */
    
public $_has_stream_include null;

    
/**
     * Number for array index
     *
     * @var int
     */
    
public $counter 0;

    
/**
     * Check if include path was updated
     *
     * @param Smarty $smarty
     *
     * @return bool
     */
    
public function isNewIncludePath(Smarty $smarty)
    {
        
$_i_path get_include_path();
        if (
$this->_include_path !== $_i_path) {
            
$this->_include_dirs = array();
            
$this->_include_path $_i_path;
            
$_dirs = (array)explode(PATH_SEPARATOR$_i_path);
            foreach (
$_dirs as $_path) {
                if (
is_dir($_path)) {
                    
$this->_include_dirs[] = $smarty->_realpath($_path DIRECTORY_SEPARATORtrue);
                }
            }
            return 
true;
        }
        return 
false;
    }

    
/**
     * return array with include path directories
     *
     * @param Smarty $smarty
     *
     * @return array
     */
    
public function getIncludePathDirs(Smarty $smarty)
    {
        
$this->isNewIncludePath($smarty);
        return 
$this->_include_dirs;
    }

    
/**
     * Return full file path from PHP include_path
     *
     * @param string[] $dirs
     * @param string   $file
     * @param Smarty  $smarty
     *
     * @return bool|string full filepath or false
     */
    
public function getIncludePath($dirs$fileSmarty $smarty)
    {
        
//if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) {
        
if (!(isset($this->_has_stream_include) ? $this->_has_stream_include :
            
$this->_has_stream_include function_exists('stream_resolve_include_path'))
        ) {
            
$this->isNewIncludePath($smarty);
        }
        
// try PHP include_path
        
foreach ($dirs as $dir) {
            
$dir_n = isset($this->number$dir ]) ? $this->number$dir ] : $this->number$dir ] = $this->counter++;
            if (isset(
$this->isFile$dir_n ][ $file ])) {
                if (
$this->isFile$dir_n ][ $file ]) {
                    return 
$this->isFile$dir_n ][ $file ];
                } else {
                    continue;
                }
            }
            if (isset(
$this->_user_dirs$dir_n ])) {
                if (
false === $this->_user_dirs$dir_n ]) {
                    continue;
                } else {
                    
$dir $this->_user_dirs$dir_n ];
                }
            } else {
                if (
$dir] === '/' || $dir] === ':') {
                    
$dir str_ireplace(getcwd(), '.'$dir);
                    if (
$dir] === '/' || $dir] === ':') {
                        
$this->_user_dirs$dir_n ] = false;
                        continue;
                    }
                }
                
$dir substr($dir2);
                
$this->_user_dirs$dir_n ] = $dir;
            }
            if (
$this->_has_stream_include) {
                
$path stream_resolve_include_path($dir . (isset($file) ? $file ''));
                if (
$path) {
                    return 
$this->isFile$dir_n ][ $file ] = $path;
                }
            } else {
                foreach (
$this->_include_dirs as $key => $_i_path) {
                    
$path = isset($this->isPath$key ][ $dir_n ]) ? $this->isPath$key ][ $dir_n ] :
                        
$this->isPath$key ][ $dir_n ] = is_dir($_dir_path $_i_path $dir) ? $_dir_path false;
                    if (
$path === false) {
                        continue;
                    }
                    if (isset(
$file)) {
                        
$_file $this->isFile$dir_n ][ $file ] = (is_file($path $file)) ? $path $file false;
                        if (
$_file) {
                            return 
$_file;
                        }
                    } else {
                        
// no file was given return directory path
                        
return $path;
                    }
                }
            }
        }
        return 
false;
    }
}
Онлайн: 3
Реклама