【问题标题】:Get the PHP version number only仅获取 PHP 版本号
【发布时间】:2015-09-23 16:18:48
【问题描述】:

我一直在用这个……

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

提前致谢。

【问题讨论】:

标签: php server


【解决方案1】:

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

【讨论】:

  • 这个正则表达式不能处理每个颠覆中的多个数字。而且,对于给定的示例,它甚至会失败:在数字上,5.4.6.1ububtu1.8 应该是 5.4.6.1,但您的正则表达式会产生 5.4.6。更好的模式是^\d+(\.\d+)*,或者甚至可能只是^[0-9.]+
  • 是的,我提供了这个正则表达式来只显示 3 位数字,因为他只需要首先两个来比较 php 版本:)
  • 他需要前三个数字,而不是前三个数字。例如,将“5.4.20”输入到您的正则表达式中——它会输出“5.4.2”。
【解决方案2】:

取自文档中的示例(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

【讨论】:

  • 虽然对于“5.5.0ubuntu”它会返回太旧。
  • 试试 echo version_compare('5.4.6.1ububtu1.8', '5.4.6.1', '>=') ?: "false";
  • 5.4.6.1 不是语义版本,所以它当然不会工作。版本是 ..,所以额外的 '.1' 在version_compare 眼中变得毫无意义,因为它不是有效的版本号。
  • 好的,告诉 OP,因为这是他报告的格式。 verson_compare 处理“额外”。这就是他要问的问题,当最后有额外内容时,根据字符串比较进行比较。当版本至关重要并且您不知道操作系统是否正在附加字符串时,这是一个非常容易陷入的陷阱。
  • 但是 5.4.6.1 不是一个有效的语义版本号(不是必须的)。他将其发布为PHP_VERSION 的输出示例,这不是他要问的。他在问如何知道版本是否大于 5.5,这是我的答案。只是为了覆盖基础,echo version_compare('5.4.6.1', '5.4.0', '&gt;=') ?: "false"; 打印 1。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    几天前我遇到了同样的问题,我从 PHP Docs 中找到了这个 sn-p

    // 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

    【讨论】:

      【解决方案5】:

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

        你可以这样做

        echo filter_var(PHP_VERSION, FILTER_SANITIZE_NUMBER_FLOAT,
        FILTER_FLAG_ALLOW_FRACTION);
        

        第二个参数将根据FLOAT 表示对结果进行清理,第三个参数允许像“点”这样的分数

        你会想在 PHP Manual- Sanitizing Filers

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-05-28
            • 2018-04-01
            • 1970-01-01
            • 2019-12-04
            • 2021-08-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多