Как получить только версию номер PHP?

Я в команде, которая разрабатывает GitKraken , поэтому я немного предвзят, но я настоятельно рекомендую вам проверить это. Он работает не только с Linux, но также с Windows и Mac, и он обладает некоторыми другими уникальными функциями, включая отмену / повтор, индексированный поиск и отзывчивый, интуитивно понятный дизайн.

15
26.09.2018, 21:28
7 ответов

Есть разные способы, мне нравится смотреть назад:

php -v | grep -Po '(?<=^PHP )[^ ]+'

или

php -v | grep -Po '(?<=PHP )([0-9.]+)'
6
27.01.2020, 19:49

В моей системе:

$> php -v | grep ^PHP | cut -d' ' -f2
7.0.32-0ubuntu0.16.04.1

, поскольку grep PHPсоответствует каждой строке PHP, с которой он сталкивается.

^PHPозначает "соответствовать только строке 'PHP', если она находится в начале строки".

Очевидно, это работает, если выходной формат php -vсогласован между версиями/сборками.

Для справки, весь вывод был:

PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
14
27.01.2020, 19:49

Если вы установили php через менеджер пакетов (, например. RPM или yum ), тогда вы можете запросить версию оттуда:

rpm -q --queryformat="%{VERSION}" php

Кроме того, вы можете попросить php сообщить вам свою версию напрямую:

php -r 'echo phpversion();'
21
27.01.2020, 19:49

Расширение ответа Джеффа Шаллера , полностью пропустить конвейер и просто запросить внутреннее постоянное представление:

$ php -r 'echo PHP_VERSION;'
7.1.15

Вы можете расширить этот шаблон, чтобы получить больше или меньше информации:

$ php -r 'echo PHP_MAJOR_VERSION;'
7

См. список PHP предварительно -определенных констант для всех доступных.

Основное преимущество :в том, что он не зависит от определенного выходного формата php -v. Учитывая, что производительность примерно такая же, как у конвейерного решения, это кажется более надежным выбором.


Если ваша цель — протестировать версию, вы также можете использовать этот шаблон. Например, этот код завершит работу 0, если PHP >= 7, и 1в противном случае :

.
php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'

Для справки, здесь приведены временные интервалы для различных тестовых случаев, упорядоченные сначала с самым быстрым:

$ time for (( i=0; i<1000; i++ )); do php -v | awk '/^PHP [0-9]/ { print $2; }' >/dev/null; done

real    0m13.368s
user    0m8.064s
sys     0m4.036s

$ time for (( i=0; i<1000; i++ )); do php -r 'echo PHP_VERSION;' >/dev/null; done

real    0m13.624s
user    0m8.408s
sys     0m3.836s

$ time for (( i=0; i<1000; i++ )); do php -v | head -1 | cut -f2 -d' ' >/dev/null; done

real    0m13.942s
user    0m8.180s
sys     0m4.160s
146
27.01.2020, 19:49

Поскольку вы начали с awk, вот awkрешение:

$ php -v | awk '/^PHP/{print $2}'
7.2.10
5
27.01.2020, 19:49
php -v | awk NR==1'{print $2}'

или

php -v | awk '{print $2; exit}'
2
27.01.2020, 19:49

Я думаю, что это более чистое и элегантное решение (также должно работать в Windows):

php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION;"

Вывод будет похож на 7.2.24.

0
27.01.2020, 19:49

Теги

Похожие вопросы