仅获取PHP版本号

时间:2015-07-06 13:30:12

标签: php server

我一直在用这个......

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包含除数字以外的任何内容,那么这个脚本将无法正常工作。

提前致谢。

7 个答案:

答案 0 :(得分:7)

获取完整版(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

Test here

答案 1 :(得分:4)

PHP提供了一个方便的函数version_compare,用于比较SemVer - 类似版本号。虽然你可以做一大堆手动字符串争吵,但我怀疑在你的用例中你可以利用盒子里的东西让你的生活更轻松。

答案 2 :(得分:4)

摘自文档中的示例(herehere):

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

答案 3 :(得分:0)

前几天我遇到了同样的问题,我从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常量包含您想要的内容。

链接here

答案 4 :(得分:0)

你可以这样做

echo filter_var(PHP_VERSION, FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION);

第二个参数将根据FLOAT表示清理结果,第三个参数允许分数如“DOT&#39;

哟希望在 PHP Manual- Sanitizing Filers

上获取战利品

答案 5 :(得分:0)

如果您确定自己始终处于或高于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";
}

答案 6 :(得分:0)

您可以使用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>