0 follower

クラス 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 property

結果

public \Check $result null

メソッドの詳細

継承されたメソッドを非表示

check() public method

指定された要件をチェックし、結果を内部フィールドに収集します。

このメソッドは、異なる要件セットをチェックするために複数回呼び出すことができます。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() public method

指定された 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() public method

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() public メソッド

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 メソッド

アップロード可能な最大ファイルサイズが指定された範囲と一致するかどうかをチェックします。

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() public メソッド

Yii コアの要件に関するチェックを実行します。

public YiiRequirementChecker checkYii ( )
戻り値 YiiRequirementChecker

自身のインスタンス。

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

            
compareByteSize() public メソッド

'5M'、'15K' など、冗長な表現で与えられた値のバイトサイズを比較します。

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

最初の値。

$b string

2番目の値。

$compare string

比較演算子。デフォルトは'>='。

戻り値 boolean

比較結果。

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

            
evaluateExpression() public メソッド

このクラスのコンテキストで PHP 式を評価します。

public mixed evaluateExpression ( $expression )
$expression string

評価するPHP式。

戻り値 mixed

式の結果。

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

            
getByteSize() public メソッド

冗長なサイズ表現からバイト単位のサイズを取得します。

例: '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 メソッド

可能な場合、現在の日付を文字列表現で返します。

public string getNowDate ( )
戻り値 string

現在の日付。

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

            
getResult() public メソッド

チェック結果を返します。

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 メソッド

サーバー情報を返します。

public string getServerInfo ( )
戻り値 string

サーバー情報。

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

            
normalizeRequirement() public メソッド

正しい形式になるように要件を正規化します。

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() public メソッド

要件チェックの結果をレンダリングします。

出力は、スクリプトがウェブから実行されるかコンソールから実行されるかによって異なります。

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() public メソッド

ビューファイルをレンダリングします。

このメソッドは、ビューファイルを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メソッド

使用エラーを表示します。

このメソッドは、現在のアプリケーションの実行を終了します。

public void usageError ( $message )
$message string

エラーメッセージ

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