Вход Регистрация
Файл: library/XenForo/Helper/Hash.php
Строк: 99
<?php

class XenForo_Helper_Hash
{
    
/**
     * Return an array containing the MD5sum of every file with the given $fileExtensions
     * within the given $path, excluding any directories matching $excludeDirs.
     *
     * @param string $path
     * @param array $fileExtensions
     * @param array $excludeDirs
     *
     * @return array [filepath => md5, ...]
     */
    
public static function hashDirectory($path, array $fileExtensions, array $exclude = array())
    {
        
$fileHashes = array();

        if (
$handle = @opendir($path))
        {
            while (
$file readdir($handle))
            {
                if (
$file{0} != '.')
                {
                    
$filePath "$path/$file";

                    if (!
in_array($filePath$exclude))
                    {
                        if (
is_dir($filePath))
                        {
                            
$fileHashes array_merge($fileHashesself::hashDirectory($filePath$fileExtensions$exclude));
                        }
                        else if (
in_array(strrchr($file'.'), $fileExtensions))
                        {
                            
$fileHashes[preg_replace('#^./#'''$filePath)] = self::getFileContentsHash(
                                
file_get_contents($filePath)
                            );
                        }
                    }
                }
            }
            
closedir($handle);
        }

        return 
$fileHashes;
    }

    
/**
     * Compares the hashes of a list of files with what is actually on the disk.
     *
     * @param array $hashes [file] => hash
     *
     * @return array List of errors, [file] => missing or mismatch
     */
    
public static function compareHashes(array $hashes)
    {
        
$cwd getcwd();
        
chdir(XenForo_Application::getInstance()->getRootDir());

        
$errors = array();

        foreach (
$hashes AS $file => $hash)
        {
            if (
file_exists($file))
            {
                if (
XenForo_Helper_Hash::getFileContentsHash(file_get_contents($file)) != $hash)
                {
                    
$errors[$file] = 'mismatch';
                }
            }
            else
            {
                
$errors[$file] = 'missing';
            }
        }

        
chdir($cwd);

        return 
$errors;
    }

    
/**
     * Hashes the content of a file in a line-ending agnostic way.
     *
     * @param string $contents Contents of file
     *
     * @return string Hash of contents
     */
    
public static function getFileContentsHash($contents)
    {
        
$contents str_replace("r"''$contents);
        return 
md5($contents);
    }

    
/**
     * Returns the text of a PHP class called $className that includes a static method
     * called getSums(), which returns an the single-dimension associative array $fileHashes.
     *
     * @param string $className
     * @param array $fileHashes
     *
     * @return string
     */
    
public static function getHashClassCode($className, array $fileHashes)
    {
        return 
'<?php

class ' 
$className '
{
    public static function getHashes()
    {
        return ' 
var_export($fileHashestrue) . ';
    }
}'
;
    }
}
Онлайн: 0
Реклама