2015-07-06 2 views
3

Я использую это ...Получить номер PHP версии только

echo PHP_VERSION; 

... для отображения версии PHP работает на сервере, который обычно показывает что-то вроде ...

5.4.6.1 

Но я только что обнаружил, что на некоторых серверах я получаю больше, чем номер версии, а вместо этого получает отображается:

5.4.6.1ububtu1.8 

I Есть ли способ получить только цифры?

Причина в том, мне нужно, чтобы проверить версию PHP и отобразить сообщение, что-то вроде ...

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

... но, конечно, если $ phpversion содержит ничего, кроме цифр то этот сценарий не будет работать должным образом.

Заранее спасибо.

+6

Его никогда не плохая идея [проверить, что manual] (http://php.net/phpversion) – RiggsFolly

+0

Возможный дубликат [Как просто проверьте, что серверная версия PHP равна 5 или выше?] (http://stackoverflow.com/questions/7197290/how-to-simply-check-if-servers-php-version-is-5-or-above) – Samsquanch

ответ

5

Чтобы получить полную версию (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

+0

Это регулярное выражение не может обрабатывать несколько цифр в каждой подрывной , И это даже не с данным примером: численно, '5.4.6.1ububtu1.8' должно быть' 5.4.6.1', но ваше регулярное выражение дает '5.4.6'. Лучшим шаблоном будет '^ \ d + (\. \ D +) *', или, возможно, даже просто '^ [0-9.] +'. –

+0

Да, я предоставил этому регулярному выражению только 3 цифры, потому что ему нужны только первые два, чтобы сравнить версию php :) –

+0

Ему нужны первые три _numbers_, а не первые три _digits_. Например, подайте «5.4.20» в ваше регулярное выражение - он выплюнет «5.4.2». –

0

Я сталкивался с такой же вопрос несколько дней назад, я нашел этот фрагмент кода из PHP Docs

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

PHP предоставляет удобную функцию, version_compare, для сравнения SemVer -как номера версий. В то время как вы могли бы сделать целую кучу ручных прерываний строк, я подозреваю, что в вашем прецеденте вы можете сделать вашу жизнь намного легче, воспользовавшись тем, что приходит в коробку.

2

Взятые из примера в документации (here и here):

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 
+1

Хотя для «5.5.0ubuntu» он вернется слишком старым. – Elin

+0

Этот метод работает в любом случае. Будет редактировать пост с тестом. – Samsquanch

+0

Попробуйте echo version_compare ('5.4.6.1ububtu1.8', '5.4.6.1', '> =')?: «False»; – Elin

0

Вы можете сделать как этот

echo filter_var(PHP_VERSION, FILTER_SANITIZE_NUMBER_FLOAT, 
FILTER_FLAG_ALLOW_FRACTION); 

Второй параметр будет дезинфицировать результаты в соответствии с FLOAT представления и третий параметр позволяет фракции вроде «DOT»

Йо захочется взять добычу на PHP Manual- Sanitizing Filers

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> 
Смежные вопросы