如何简单检查服务器的PHP版本是否为5或更高版本?

8
我正在创建一个程序的预安装检查清单。该程序需要PHP5,因此我需要检查清单脚本来检查PHP5的可用性。
有一个名为phpversion()的函数,它将以5.3.6或类似格式返回。然而,我希望检查清单非常直接,只需告诉您是或否。因此,显示当前版本并没有太大帮助。好吧,一种方法是使用phpversion()并删除逗号等。但是难道没有更简洁的方法吗?(奇怪的是,这方面没有任何信息)

那么,如何简单地检查服务器的PHP版本是否为5或以上?

if (...) {
    echo 'Server has PHP5 or above!';
} else {
    echo 'Servers PHP version is lower then PHP5';
}
9个回答

23

你可以尝试适应类似这样的做法:

<?php
if (version_compare(PHP_VERSION, '6.0.0') >= 0) {
    echo 'I am at least PHP version 6.0.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
    echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
    echo 'I am using PHP 5, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '<')) {
    echo 'I am using PHP 4, my version: ' . PHP_VERSION . "\n";
}
?>

你可以在这里查看文档


1
好的解决方案。特别是因为PHP_VERSION可用,而像其他人提到的那样,PHP_MAJOR_VERSION仅在5.2之后才可用。 - GolezTrol
是的,我本来想建议使用PHP_MAJOR_VERSION,但我在文档中看到了那个小提示。 - Devin M

18

有一个预定义的常量:

echo PHP_MAJOR_VERSION // displays 5

http://nl.php.net/manual/zh/reserved.constants.php#reserved.constants.core

因此:

if (defined('PHP_MAJOR_VERSION') && PHP_MAJOR_VERSION >= 5) 
{
  echo 'Server has PHP 5 or above!';
} 
else 
{
  echo 'Servers PHP version is lower then PHP5';
}

以上方法仅适用于PHP > 5.2.7版本,对于低版本请尝试以下方法:

if (strnatcmp(phpversion(),'5.0.0') >= 0)
{
  echo '5 or higher';
}
else
{
  echo '4 or lower';
}

在这里的一个评论中建议使用:http://www.php.net/manual/en/function.phpversion.php#91816


1
那将是很棒的,除了一个问题:自 PHP 5.2.7 起可用。 - timdev
太完美了!这正是我想要的!我感到很尴尬,我自己不能解决这个问题。我以为必须有一些极其奇怪的函数可以做到这一点。谢谢!! - Kalle H. Väravas
@Kalle - 看看我的回答,你只需要在 phpversion() 的返回值上使用 substr()。简单易行。 - timdev
@Kalle:检查一下我的编辑,为PHP < 5.2.7提供了一个更完整的示例。 - Luwe
知道在这样极端的区域进行性能检查是非常微不足道的。 - Luwe
显示剩余5条评论

11

是的,但是如果PHP_VERSION在PHP4中不受支持,那么它就会失去分数..?! - Kalle H. Väravas
1
如果安装程序确实需要在 PHP < 4.1 上运行,您可以首先检查 version_compare 是否存在。 if (function_exists('version_compare')&& version_compare(PHP_VERSION,'5.0.0','>='))。这应该能够回到 4.0。 - mcrumley

4
如果函数phpversion()返回的仅是一个数字,您可以使用以下方式处理:
if ( phpversion() >=5 ) {
    echo 'Server has PHP5 or above!';
} else {
    echo 'Servers PHP version is lower then PHP5';
}

它不返回数字,而是一个字符串,包含完整版本。 - GolezTrol
嗯,奇怪的是这个可以工作。哇,答案真的可以那么简单吗? - Kalle H. Väravas
@GolezTrol:这是我最初的想法,但从技术上讲,它只是一个带有小数点的数字。 - Kalle H. Väravas
它能够工作是因为它们被视为字符串进行比较。但是一旦我们到达版本10,它将会失败。它不是一个数字。它包含两个点,无法转换为浮点数。 - GolezTrol
1
记录一下:phpversion() 返回的确实是一个字符串,因此它可以用 number_format() 转换为数字。然而,这比被接受的方法要慢。 - Kalle H. Väravas

1
echo 'Current PHP version: ' . phpversion();

您可以在PHP文档中获取更多信息。该文档适用于PHP4及以上版本。


1
这并没有真正回答他的问题,他似乎想知道“如何判断phpversion()的输出是否大于或等于5.0版本”。 - timdev
如果他不能使用phpversion()数字进行IF操作,那我们就有问题了...这不是很基础吗? - Patrick Desjardins

1
if ( substr(phpversion(),0,1) >= 5) {
  //php >= 5
}else{
  //php < 5
}

这不是很难,是吗?

编辑:如果我们担心第10个版本会破坏上面的代码:

if ( strtok(phpversion(),'.') >= 5) {
    // php >= 5
}else{
    // php < 5
}

是的,一旦我们达到第10个版本,那就可以了。 :) 最好搜索一下点。我知道PHP开发不是很快,但我也曾这样认为Firefox也是如此,现在他们在一年内发布了3个版本。 - GolezTrol

1
$version = explode('.', phpversion());
$major = (int)$version[0];
$minor = (int)$version[1];
$release = (int)$version[2];

0

实际上,Symfony2 已经包含了这样一个脚本。它在 app/check.php 中。它会检查 PHP 5.3.2 的最小版本,以及许多其他的东西。

我建议你直接使用它。


0

echo PHP_VERSION_ID;
//如果您使用的是版本5.3.7,则输出为50307

或者echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION.PHP_RELEASE_VERSION; //如果您使用的是版本5.3.7,则输出为537


版本检查的目的是为了淘汰过时的服务器。如果PHP_VERSION_ID是5.2.7及以上版本,则php版本为4会出现错误。 - Kalle H. Väravas
同时,似乎需要在您的代码中预定义PHP_VERSION_ID,它不会来自服务器端http://ee1.php.net/phpversion。 - Kalle H. Väravas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接