PHP:获取ICU版本

时间:2017-06-10 10:24:24

标签: php yii2 icu intl

我的生产网站只提供旧的ICU版本4.2.1。由于Yii2需要49.1或更高版本,我需要在PHP中进行变通。

如何获取PHP在运行时使用的ICU(libicu)的nersion数。由于我经常进行生产更新,因此我需要在PHP代码中动态获取版本号,例如由

$libIcuVersion = ...

版本号显示在phpinfo.php中,但输出无法在我的代码中使用。

4 个答案:

答案 0 :(得分:2)

Symfony/IntlSymfony\Component\Intl::getIcuVersion()中的工作方式。

try {
    $reflector = new \ReflectionExtension('intl');
    ob_start();
    $reflector->info();
    $output = strip_tags(ob_get_clean());
    preg_match('/^ICU version (?:=>)?(.*)$/m', $output, $matches);
    $icuVersion = trim($matches[1]);
} catch (\ReflectionException $e) {
    $icuVersion = null;
}

答案 1 :(得分:1)

您可以使用Yii 2正在使用的这种稍微修改过的方法:

function checkPhpExtensionVersion($extensionName)
{
    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 $extensionVersion;
}

答案 2 :(得分:1)

我将获取并解析phpinfo()结果。

php artisan schedule:run

答案 3 :(得分:0)

尝试一下:

 php -r "echo phpinfo();" |grep -i 'icu'