我一直在用这个…
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>