我的生产网站只提供旧的ICU版本4.2.1。由于Yii2需要49.1或更高版本,我需要在PHP中进行变通。
如何获取PHP在运行时使用的ICU(libicu)的nersion数。由于我经常进行生产更新,因此我需要在PHP代码中动态获取版本号,例如由
$libIcuVersion = ...
版本号显示在phpinfo.php
中,但输出无法在我的代码中使用。
答案 0 :(得分:2)
Symfony/Intl在Symfony\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'