0 关注者

YiiRequirementChecker 类

继承关系YiiRequirementChecker
自版本可用2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/requirements/YiiRequirementChecker.php

YiiRequirementChecker 允许检查当前系统是否满足运行 Yii 应用程序的要求。

此类允许为 Web 和控制台应用程序接口呈现检查报告。

示例

require_once 'path/to/YiiRequirementChecker.php';
$requirementsChecker = new YiiRequirementChecker();
$requirements = array(
    array(
        'name' => 'PHP Some Extension',
        'mandatory' => true,
        'condition' => extension_loaded('some_extension'),
        'by' => 'Some application feature',
        'memo' => 'PHP extension "some_extension" required',
    ),
);
$requirementsChecker->checkYii()->check($requirements)->render();

如果您希望使用自己的表示方式呈现报告,请使用 getResult() 而不是 render()

要求条件可以采用“eval:PHP 表达式”的格式。在这种情况下,指定的 PHP 表达式将在该类的实例上下文中进行评估。例如

$requirements = array(
    array(
        'name' => 'Upload max file size',
        'condition' => 'eval:$this->checkUploadMaxFileSize("5M")',
    ),
);

注意:此类定义与普通的 Yii 样式不匹配,因为它应该与 PHP 4.3 匹配,并且不应使用来自较新 PHP 版本的功能!

公共属性

隐藏继承的属性

属性 类型 描述 定义位置
$result \Check 结果 YiiRequirementChecker

公共方法

隐藏继承的方法

方法 描述 定义位置
check() 检查给定的要求,并将结果收集到内部字段中。 YiiRequirementChecker
checkPhpExtensionVersion() 检查给定的 PHP 扩展是否可用,以及它的版本是否与给定的版本匹配。 YiiRequirementChecker
checkPhpIniOff() 检查 PHP 配置选项(来自 php.ini)是否已关闭。 YiiRequirementChecker
checkPhpIniOn() 检查 PHP 配置选项(来自 php.ini)是否已开启。 YiiRequirementChecker
checkUploadMaxFileSize() 检查上传的最大文件大小是否与给定的范围匹配。 YiiRequirementChecker
checkYii() 执行 Yii 核心要求的检查。 YiiRequirementChecker
compareByteSize() 比较以冗长表示形式给出的值的字节大小,例如“5M”、“15K”等。 YiiRequirementChecker
evaluateExpression() 在该类的上下文中评估 PHP 表达式。 YiiRequirementChecker
getByteSize() 从冗长的大小表示中获取字节大小。 YiiRequirementChecker
getNowDate() 如果可能,以字符串表示形式返回当前日期。 YiiRequirementChecker
getResult() 返回检查结果。 YiiRequirementChecker
getServerInfo() 返回服务器信息。 YiiRequirementChecker
normalizeRequirement() 规范化要求,确保它具有正确的格式。 YiiRequirementChecker
render() 呈现要求检查结果。 YiiRequirementChecker
renderViewFile() 呈现视图文件。 YiiRequirementChecker
usageError() 显示使用错误。 YiiRequirementChecker

属性详情

隐藏继承的属性

$result 公共属性

结果

public \Check $result null

方法详情

隐藏继承的方法

check() 公共方法

检查给定的要求,并将结果收集到内部字段中。

此方法可以多次调用以检查不同的要求集。使用 getResult()render() 获取结果。

public $this check ( $requirements )
$requirements array|string

要检查的要求。如果为数组,则将其视为要求集;如果为字符串,则将其视为包含要求的文件的路径;

返回 $this

自身实例。

                function check($requirements)
{
    if (is_string($requirements)) {
        $requirements = require $requirements;
    }
    if (!is_array($requirements)) {
        $this->usageError('Requirements must be an array, "' . gettype($requirements) . '" has been given!');
    }
    if (!isset($this->result) || !is_array($this->result)) {
        $this->result = array(
            'summary' => array(
                'total' => 0,
                'errors' => 0,
                'warnings' => 0,
            ),
            'requirements' => array(),
        );
    }
    foreach ($requirements as $key => $rawRequirement) {
        $requirement = $this->normalizeRequirement($rawRequirement, $key);
        $this->result['summary']['total']++;
        if (!$requirement['condition']) {
            if ($requirement['mandatory']) {
                $requirement['error'] = true;
                $requirement['warning'] = true;
                $this->result['summary']['errors']++;
            } else {
                $requirement['error'] = false;
                $requirement['warning'] = true;
                $this->result['summary']['warnings']++;
            }
        } else {
            $requirement['error'] = false;
            $requirement['warning'] = false;
        }
        $this->result['requirements'][] = $requirement;
    }
    return $this;
}

            
checkPhpExtensionVersion() 公共方法

检查给定的 PHP 扩展是否可用,以及它的版本是否与给定的版本匹配。

public boolean checkPhpExtensionVersion ( $extensionName, $version, $compare '>=' )
$extensionName string

PHP 扩展名称。

$version string

所需的 PHP 扩展版本。

$compare string

比较运算符,默认情况下为“>=”

返回 boolean

如果 PHP 扩展版本匹配。

                function checkPhpExtensionVersion($extensionName, $version, $compare = '>=')
{
    if (!extension_loaded($extensionName)) {
        return false;
    }
    $extensionVersion = phpversion($extensionName);
    if (empty($extensionVersion)) {
        return false;
    }
    if (strncasecmp($extensionVersion, 'PECL-', 5) === 0) {
        $extensionVersion = substr($extensionVersion, 5);
    }
    return version_compare($extensionVersion, $version, $compare);
}

            
checkPhpIniOff() 公共方法

检查 PHP 配置选项(来自 php.ini)是否已关闭。

public boolean checkPhpIniOff ( $name )
$name string

配置选项名称。

返回 boolean

选项已关闭。

                function checkPhpIniOff($name)
{
    $value = ini_get($name);
    if (empty($value)) {
        return true;
    }
    return (strtolower($value) === 'off');
}

            
checkPhpIniOn() 公共方法

检查 PHP 配置选项(来自 php.ini)是否已开启。

public boolean checkPhpIniOn ( $name )
$name string

配置选项名称。

返回 boolean

选项已开启。

                function checkPhpIniOn($name)
{
    $value = ini_get($name);
    if (empty($value)) {
        return false;
    }
    return ((int) $value === 1 || strtolower($value) === 'on');
}

            
checkUploadMaxFileSize() 公共方法

检查上传的最大文件大小是否与给定的范围匹配。

public boolean checkUploadMaxFileSize ( $min null, $max null )
$min string|null

详细的文件大小最小值要求,传递 null 跳过最小值检查。

$max string|null

详细的文件大小最大值要求,传递 null 跳过最大值检查。

返回 boolean

成功。

                function checkUploadMaxFileSize($min = null, $max = null)
{
    $postMaxSize = ini_get('post_max_size');
    $uploadMaxFileSize = ini_get('upload_max_filesize');
    if ($min !== null) {
        $minCheckResult = $this->compareByteSize($postMaxSize, $min, '>=') && $this->compareByteSize($uploadMaxFileSize, $min, '>=');
    } else {
        $minCheckResult = true;
    }
    if ($max !== null) {
        $maxCheckResult = $this->compareByteSize($postMaxSize, $max, '<=') && $this->compareByteSize($uploadMaxFileSize, $max, '<=');
    } else {
        $maxCheckResult = true;
    }
    return ($minCheckResult && $maxCheckResult);
}

            
checkYii() 公共方法

执行 Yii 核心要求的检查。

public YiiRequirementChecker checkYii ( )
返回 YiiRequirementChecker

自身实例。

                function checkYii()
{
    return $this->check(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'requirements.php');
}

            
compareByteSize() 公共方法

比较以冗长表示形式给出的值的字节大小,例如“5M”、“15K”等。

public boolean compareByteSize ( $a, $b, $compare '>=' )
$a string

第一个值。

$b string

第二个值。

$compare string

比较运算符,默认值为'>='。

返回 boolean

比较结果。

                function compareByteSize($a, $b, $compare = '>=')
{
    $compareExpression = '(' . $this->getByteSize($a) . $compare . $this->getByteSize($b) . ')';
    return $this->evaluateExpression($compareExpression);
}

            
evaluateExpression() 公共方法

在该类的上下文中评估 PHP 表达式。

public mixed evaluateExpression ( $expression )
$expression string

要计算的 PHP 表达式。

返回 mixed

表达式结果。

                function evaluateExpression($expression)
{
    return eval('return ' . $expression . ';');
}

            
getByteSize() 公共方法

从冗长的大小表示中获取字节大小。

例如:'5K' => 5*1024

public integer getByteSize ( $verboseSize )
$verboseSize string

详细的大小表示。

返回 integer

实际大小(以字节为单位)。

                function getByteSize($verboseSize)
{
    if (empty($verboseSize)) {
        return 0;
    }
    if (is_numeric($verboseSize)) {
        return (int) $verboseSize;
    }
    $sizeUnit = trim($verboseSize, '0123456789');
    $size = trim(str_replace($sizeUnit, '', $verboseSize));
    if (!is_numeric($size)) {
        return 0;
    }
    switch (strtolower($sizeUnit)) {
        case 'kb':
        case 'k':
            return $size * 1024;
        case 'mb':
        case 'm':
            return $size * 1024 * 1024;
        case 'gb':
        case 'g':
            return $size * 1024 * 1024 * 1024;
        default:
            return 0;
    }
}

            
getNowDate() 公共方法

如果可能,以字符串表示形式返回当前日期。

public string getNowDate ( )
返回 string

当前日期。

                function getNowDate()
{
    return @strftime('%Y-%m-%d %H:%M', time());
}

            
getResult() 公共方法

返回检查结果。

public array|null getResult ( )
返回 array|null

检查结果格式

array(
    'summary' => array(
        'total' => total number of checks,
        'errors' => number of errors,
        'warnings' => number of warnings,
    ),
    'requirements' => array(
        array(
            ...
            'error' => is there an error,
            'warning' => is there a warning,
        ),
        ...
    ),
)

                function getResult()
{
    if (isset($this->result)) {
        return $this->result;
    } else {
        return null;
    }
}

            
getServerInfo() 公共方法

返回服务器信息。

public string getServerInfo ( )
返回 string

服务器信息。

                function getServerInfo()
{
    return isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '';
}

            
normalizeRequirement() 公共方法

规范化要求,确保它具有正确的格式。

public array normalizeRequirement ( $requirement, $requirementKey 0 )
$requirement array

原始要求。

$requirementKey integer

列表中的要求键。

返回 array

标准化的要求。

                function normalizeRequirement($requirement, $requirementKey = 0)
{
    if (!is_array($requirement)) {
        $this->usageError('Requirement must be an array!');
    }
    if (!array_key_exists('condition', $requirement)) {
        $this->usageError("Requirement '{$requirementKey}' has no condition!");
    } else {
        $evalPrefix = 'eval:';
        if (is_string($requirement['condition']) && strpos($requirement['condition'], $evalPrefix) === 0) {
            $expression = substr($requirement['condition'], strlen($evalPrefix));
            $requirement['condition'] = $this->evaluateExpression($expression);
        }
    }
    if (!array_key_exists('name', $requirement)) {
        $requirement['name'] = is_numeric($requirementKey) ? 'Requirement #' . $requirementKey : $requirementKey;
    }
    if (!array_key_exists('mandatory', $requirement)) {
        if (array_key_exists('required', $requirement)) {
            $requirement['mandatory'] = $requirement['required'];
        } else {
            $requirement['mandatory'] = false;
        }
    }
    if (!array_key_exists('by', $requirement)) {
        $requirement['by'] = 'Unknown';
    }
    if (!array_key_exists('memo', $requirement)) {
        $requirement['memo'] = '';
    }
    return $requirement;
}

            
render() 公共方法

呈现要求检查结果。

输出将根据脚本是从 Web 还是从控制台运行而有所不同。

public void render ( )

                function render()
{
    if (!isset($this->result)) {
        $this->usageError('Nothing to render!');
    }
    $baseViewFilePath = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'views';
    if (!empty($_SERVER['argv'])) {
        $viewFileName = $baseViewFilePath . DIRECTORY_SEPARATOR . 'console' . DIRECTORY_SEPARATOR . 'index.php';
    } else {
        $viewFileName = $baseViewFilePath . DIRECTORY_SEPARATOR . 'web' . DIRECTORY_SEPARATOR . 'index.php';
    }
    $this->renderViewFile($viewFileName, $this->result);
}

            
renderViewFile() 公共方法

呈现视图文件。

此方法将视图文件包含为 PHP 脚本,并在需要时捕获显示结果。

public string|null renderViewFile ( $_viewFile_, $_data_ null, $_return_ false )
$_viewFile_ string

视图文件

$_data_ array|null

要提取并提供给视图文件的数据

$_return_ boolean

是否应将渲染结果作为字符串返回

返回 string|null

渲染结果。如果不需要渲染结果,则为 null。

                function renderViewFile($_viewFile_, $_data_ = null, $_return_ = false)
{
    // we use special variable names here to avoid conflict when extracting data
    if (is_array($_data_)) {
        extract($_data_, EXTR_PREFIX_SAME, 'data');
    } else {
        $data = $_data_;
    }
    if ($_return_) {
        ob_start();
        ob_implicit_flush(false);
        require $_viewFile_;
        return ob_get_clean();
    } else {
        require $_viewFile_;
    }
}

            
usageError() 公共方法

显示使用错误。

此方法将终止当前应用程序的执行。

public void usageError ( $message )
$message string

错误消息

                function usageError($message)
{
    echo "Error: $message\n\n";
    exit(1);
}