仅获取PHP版本号


Get the PHP version number only

我一直在用这个…

echo PHP_VERSION;

…显示服务器上运行的PHP版本,通常显示类似于…

5.4.6.1

但是我刚刚发现,在一些服务器上,我得到的不仅仅是版本号,而是显示:

5.4.6.1ububtu1.8

有办法让我只拿到数字吗?

原因是我需要检查PHP的版本并显示一条消息,类似于…

$phpversion = PHP_VERSION;
if($phpversion >= "5.5") {
    echo "All good";
} else {
    echo "Your version of PHP is too old";
}

…但是,如果$phpversion包含数字以外的任何内容,那么这个脚本将无法正常工作。

获取完整版本(5.4.6.1)

  <?php
    preg_match("#^'d+('.'d+)*#", PHP_VERSION, $match);
    echo $match[0];

在您的示例中,它将返回5.4.6.1

获取所需版本(5.4)

preg_match("#^'d.'d#", "5.4.6.1ububtu1.8", $match);
echo $match[0];        

在您的示例中,它将返回5.4

这里的

测试

摘自文档中的一个示例(这里和这里):

if (version_compare(phpversion(), '5.5.0', '>=')) {
    echo "All good";
} else {
    echo "Your version of PHP is too old";
}
测试脚本:

 <?php
 echo PHP_VERSION;
 echo PHP_EOL;
 echo phpversion();
 echo PHP_EOL;
 echo version_compare(phpversion(), '5.5.0', '>=') ?: "false";
 echo PHP_EOL;
 echo version_compare(phpversion(), '5.6.0', '>=') ?: "false";
 echo PHP_EOL;
 echo version_compare(phpversion(), '5.7.0', '>=') ?: "false";
 echo PHP_EOL;
 echo version_compare('5.4.6.1ububtu1.8', '5.4.0', '>=') ?: "false";
 echo PHP_EOL;
 echo version_compare('5.4.6.1ububtu1.8', '5.5.0', '>=') ?: "false";
 ?>
输出:

$ php test.php
5.6.4-1+deb.sury.org~trusty+1
5.6.4-1+deb.sury.org~trusty+1
1
1
false
1
false

PHP提供了一个方便的函数version_compare,用于比较类似semver的版本号。虽然您可以进行大量的手动字符串整理,但我怀疑在您的用例中,您可以通过利用盒中的内容来使您的工作更轻松。

几天前我遇到了同样的问题,我从PHP文档

中找到了这个片段
// PHP_VERSION_ID is available as of PHP 5.2.7, if our 
// version is lower than that, then emulate it
if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}

现在,PHP_VERSION_ID常数包含了你想要的。

链接到这里

如果你知道你总是在5.2.7或以上。

http://php.net/manual/en/reserved.constants.php reserved.constants.core

$phpversionmajor = PHP_VERSION_MAJOR;
$phpversionmajor = PHP_VERSION_MINOR;
if($phpversionmajor >= 5 && $phpversionminor >= 5) {
    echo "All good";
} else {
    echo "Your version of PHP is too old";
}

你可以这样做

echo filter_var(PHP_VERSION, FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION);

第二个参数将根据FLOAT表示对结果进行消毒,第三个参数允许像'DOT'这样的分数

你想在PHP手册-清理过滤器

您可以使用PHP的变量修改功能来检查特定版本:

<?php
$v=PHP_VERSION;
echo "RAW: ".$v.PHP_EOL;
$n=$v+0;
echo "MANGLED: ".$n.PHP_EOL;
echo "CONSTANT DIRECTLY  MANGLED: ".(PHP_VERSION+0).PHP_EOL;
$u="5.4.6.1ububtu1.8";
echo "From string: ".$u.PHP_EOL;
$nu=$u+0;
echo "From mangled string: ".$nu.PHP_EOL;
输出:

$: ~/test> php -f v.php 
RAW: 5.5.24
MANGLED: 5.5
CONSTANT DIRECTLY  MANGLED: 5.5
From string: 5.4.6.1ububtu1.8
From mangled string: 5.4
$: ~/test>