Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/tedivm/stash/src/Stash/Utilities.php
Строк: 188
<?php

/*
 * This file is part of the Stash package.
 *
 * (c) Robert Hafner <tedivm@tedivm.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Stash;

use 
StashExceptionRuntimeException;
use 
StashExceptionInvalidArgumentException;
use 
StashInterfacesDriverInterface;

/**
 * StashUtilities contains static functions used throughout the Stash project, both by core classes and drivers.
 *
 * @package Stash
 * @author  Robert Hafner <tedivm@tedivm.com>
 */
class Utilities
{
    
/**
     * Various drivers use this to define what kind of encoding to use on objects being cached. It needs to be revamped
     * a bit.
     */
    
public static function encoding($data)
    {
        if (
is_scalar($data)) {
            if (
is_bool($data)) {
                return 
'bool';
            }

            if (
is_numeric($data) && ($data >= 2147483648 || $data < -2147483648)) {
                return 
'serialize';
            }

            if (
is_string($data)) {
                return 
'string';
            }

            return 
'none';
        }

        return 
'serialize';
    }

    
/**
     * Uses the encoding function to define an encoding and uses it on the data. This system is going to be revamped.
     */
    
public static function encode($data)
    {
        switch (
self::encoding($data)) {
            case 
'bool':
                return 
$data 'true' 'false';

            case 
'serialize':
                return 
serialize($data);

            case 
'string':
            case 
'none':
            default:
        }

        return 
$data;
    }

    
/**
     * Takes a piece of data encoded with the 'encode' function and returns it's actual value.
     *
     */
    
public static function decode($data$method)
    {
        switch (
$method) {
            case 
'bool':
                
// note that true is a string, so this
                
return $data == 'true' true false;

            case 
'serialize':
                return 
unserialize($data);

            case 
'string':
            case 
'none':
            default:
        }

        return 
$data;
    }

    
/**
     * Returns the default base directory for the system when one isn't provided by the developer. This is a directory
     * of last resort and can cause problems if one library is shared by multiple projects. The directory returned
     * resides in the system's temp folder and is specific to each Stash installation and driver.
     *
     * @param  DriverInterface $driver
     * @return string          Path for Stash files
     */
    
public static function getBaseDirectory(DriverInterface $driver null)
    {
        
$tmp rtrim(sys_get_temp_dir(), '/\') . '/';

        $baseDir = $tmp . '
stash/' . md5(__DIR__) . '/';
        if (isset($driver)) {
            $baseDir .= str_replace(array('
/', '\'), '_', get_class($driver)) . '/';
        }

        if (!is_dir($baseDir)) {
            mkdir($baseDir, 0770, true);
        }

        return $baseDir;
    }

    /**
     * Deletes a directory and all of its contents.
     *
     * @param  string                     $file Path to file or directory.
     * @return bool                       Returns true on success, false otherwise.
     * @throws ExceptionRuntimeException
     */
    public static function deleteRecursive($file)
    {
        if (!preg_match('
/^(?:/|\\|w:\\|w:/).*$/', $file)) {
            throw new RuntimeException('
deleteRecursive function requires an absolute path.');
        }

        $badCalls = array('
/', '/*', '/.', '/..');
        if (in_array($file, $badCalls)) {
            throw new RuntimeException('deleteRecursive function does not like that call.');
        }

        $filePath = rtrim($file, ' /');

        if (is_dir($filePath)) {
            $directoryIt = new RecursiveDirectoryIterator($filePath);

            foreach (new RecursiveIteratorIterator($directoryIt, RecursiveIteratorIterator::CHILD_FIRST) as $file) {
                $filename = $file->getPathname();
                if ($file->isDir()) {
                    $dirFiles = scandir($file->getPathname());
                    if ($dirFiles && count($dirFiles) == 2) {
                        $filename = rtrim($filename, '/.');
                        rmdir($filename);
                    }
                    unset($dirFiles);
                    continue;
                }


                if (file_exists($filename)) {
                    unlink($filename);
                }

            }
            unset($directoryIt);

            if (is_dir($filePath)) {
                rmdir($filePath);
            }

            return true;
        } elseif (is_file($filePath)) {
            return unlink($file);
        }

        return false;
    }

    public static function normalizeKeys($keys, $hash = 'md5')
    {
        $pKey = array();
        foreach ($keys as $keyPiece) {
            $prefix = substr($keyPiece, 0, 1) == '@' ? '@' : '';
            $pKeyPiece = $prefix . $hash($keyPiece);
            $pKey[] = $pKeyPiece;
        }

        return $pKey;
    }


    /**
     * Checks to see whether the requisite permissions are available on the specified path.
     *
     * @throws ExceptionRuntimeException
     * @throws ExceptionInvalidArgumentException
     */
    
public static function checkFileSystemPermissions($path null$permissions)
    {
        if (!isset(
$path)) {
            throw new 
RuntimeException('Cache path was not set correctly.');
        }

        if (
file_exists($path) && !is_dir($path)) {
            throw new 
InvalidArgumentException('Cache path is not a directory.');
        }

        if (!
is_dir($path) && !@mkdir($path$permissionstrue )) {
            throw new 
InvalidArgumentException('Failed to create cache path.');
        }

        if (!
is_writable($path)) {
            throw new 
InvalidArgumentException('Cache path is not writable.');
        }
    }
}
Онлайн: 2
Реклама